diff --git a/.gitignore b/.gitignore index 7e7d56a71..93b272be0 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ *.ipr *.iws +local/ + # IntelliJ out/ # mpeltonen/sbt-idea plugin @@ -133,3 +135,6 @@ run/ # Ignore datagen cache. /common/src/main/generated/resources/.cache/ + +/*/bin/ +/.vscode/ diff --git a/.idea/discord.xml b/.idea/discord.xml index bc04a8267..3aef922ea 100644 --- a/.idea/discord.xml +++ b/.idea/discord.xml @@ -2,8 +2,11 @@ \ No newline at end of file diff --git a/api/build.gradle.kts b/api/build.gradle.kts new file mode 100644 index 000000000..afef51d67 --- /dev/null +++ b/api/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + id("java") +} + +group = "com.ultreon.mods.devices" +version = "0.9.0" + +repositories { + mavenCentral() + + maven("https://github.com/Ultreon/ultreon-data/raw/main/.mvnrepo") + maven("https://github.com/Ultreon/corelibs/raw/main/.mvnrepo") +} + +dependencies { + testImplementation(platform("org.junit:junit-bom:5.10.0")) + testImplementation("org.junit.jupiter:junit-jupiter") + + implementation("org.jetbrains:annotations:23.0.0") + + implementation("io.github.ultreon:ubo:1.3.0") + implementation("io.github.ultreon.corelibs:commons-v0:0.2.0") +} + +tasks.test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1034f3de7..bae98f213 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.2-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.6-SNAPSHOT" apply false id "org.jetbrains.kotlin.jvm" version "1.7.10" } repositories { @@ -22,6 +22,10 @@ Object getModDescription() { } subprojects { + if (project.name == "api") { + return + } + apply plugin: "dev.architectury.loom" loom { @@ -62,6 +66,9 @@ subprojects { includeGroup "curse.maven" } } + maven { + url "https://jitpack.io" + } maven { // location of the maven that hosts JEI files name = "Progwml6 maven" @@ -71,7 +78,9 @@ subprojects { } dependencies { - minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" + minecraft "com.mojang:minecraft:${rootProject.minecraft_version}", { + transitive = false + } // The following line declares the mojmap mappings, you may use other mappings as well mappings loom.layered() { officialMojangMappings() @@ -86,9 +95,12 @@ subprojects { allprojects { apply plugin: "java" - apply plugin: "architectury-plugin" apply plugin: "maven-publish" + if (project.name != "api") { + apply plugin: "architectury-plugin" + } + archivesBaseName = rootProject.archives_base_name version = rootProject.version group = rootProject.maven_group @@ -99,8 +111,14 @@ allprojects { // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. // See https://docs.gradle.org/current/userguide/declaring_repositories.html // for more information about repositories. + mavenCentral() maven { url "https://maven.parchmentmc.org" } maven { url "https://maven.jab125.dev" } + maven { url "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } + maven { url "https://cursemaven.com" } + maven { url "https://maven.terraformersmc.com/releases" } + maven { url "https://github.com/Ultreon/ultreon-data/raw/main/.mvnrepo" } + maven { url "https://github.com/Ultreon/corelibs/raw/main/.mvnrepo" } flatDir { dir "$rootProject.projectDir/libs/" } } diff --git a/common/build.gradle b/common/build.gradle index d7641c8f2..670f283bb 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -18,6 +18,11 @@ dependencies { // Remove the next line if you don't want to depend on the API modApi "dev.architectury:architectury:$architectury_version" + implementation("io.github.ultreon:ubo:1.3.0") + + modApi "fuzs.forgeconfigapiport:forgeconfigapiport-common-neoforgeapi:$forgeconfigapiport_version" + + implementation project(":api") implementation "org.jetbrains.kotlin:kotlin-reflect:1.7.10" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10" // modApi "com.ultreon:ultranlang:0.1.0+6" @@ -25,7 +30,6 @@ dependencies { modCompileOnly "fuzs.forgeconfigapiport:forgeconfigapiport-common:8.0.0" modCompileOnly 'com.electronwill.night-config:core:3.6.3' modCompileOnly 'com.electronwill.night-config:toml:3.6.3' - } sourceSets { diff --git a/common/src/main/generated/resources/data/devices/tags/block_entity_type/computers.json b/common/src/main/generated/resources/data/devices/tags/block_entity_type/computers.json new file mode 100644 index 000000000..cdc79f282 --- /dev/null +++ b/common/src/main/generated/resources/data/devices/tags/block_entity_type/computers.json @@ -0,0 +1,13 @@ +{ + "replace": false, + "values": [ + { + "id": "devices:laptop", + "required": false + }, + { + "id": "devices:mac_max_x", + "required": false + } + ] +} \ No newline at end of file diff --git a/common/src/main/generated/resources/data/devices/tags/block_entity_type/network_devices.json b/common/src/main/generated/resources/data/devices/tags/block_entity_type/network_devices.json index c758ed906..6e7befe45 100644 --- a/common/src/main/generated/resources/data/devices/tags/block_entity_type/network_devices.json +++ b/common/src/main/generated/resources/data/devices/tags/block_entity_type/network_devices.json @@ -1,8 +1,7 @@ { "replace": false, "values": [ - "devices:laptop", - "devices:printer", - "devices:mac_max_x" + "#devices:computers", + "#devices:printers" ] } \ No newline at end of file diff --git a/common/src/main/generated/resources/data/devices/tags/block_entity_type/printers.json b/common/src/main/generated/resources/data/devices/tags/block_entity_type/printers.json new file mode 100644 index 000000000..3a735a3d5 --- /dev/null +++ b/common/src/main/generated/resources/data/devices/tags/block_entity_type/printers.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + { + "id": "devices:printer", + "required": false + } + ] +} \ No newline at end of file diff --git a/common/src/main/java/com/jab125/classloader/api/ClassLoaderApi.java b/common/src/main/java/com/jab125/classloader/api/ClassLoaderApi.java index d8f981583..8dc138c7c 100644 --- a/common/src/main/java/com/jab125/classloader/api/ClassLoaderApi.java +++ b/common/src/main/java/com/jab125/classloader/api/ClassLoaderApi.java @@ -1,17 +1,12 @@ package com.jab125.classloader.api; import com.jab125.classloader.impl.CustomClassLoader; -import net.fabricmc.loader.api.FabricLoader; -import net.fabricmc.loader.impl.launch.knot.Knot; -import java.io.IOException; import java.lang.reflect.InvocationTargetException; -import java.nio.file.Paths; -import java.util.jar.JarFile; public class ClassLoaderApi { public static ClassLoaderApi INSTANCE = new ClassLoaderApi(); - public void init() throws IOException { + public void init() { var d = new CustomClassLoader(); d.cl.getExecutionClasses().forEach((a) -> { try { diff --git a/common/src/main/java/com/jab125/classloader/api/Execution.java b/common/src/main/java/com/jab125/classloader/api/Execution.java index a5ceb611a..6aa796a85 100644 --- a/common/src/main/java/com/jab125/classloader/api/Execution.java +++ b/common/src/main/java/com/jab125/classloader/api/Execution.java @@ -1,7 +1,5 @@ package com.jab125.classloader.api; -import org.spongepowered.asm.mixin.injection.ModifyConstant; - import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/common/src/main/java/com/jab125/classloader/impl/ClassScanner.java b/common/src/main/java/com/jab125/classloader/impl/ClassScanner.java index e9f292743..a12fa49a8 100644 --- a/common/src/main/java/com/jab125/classloader/impl/ClassScanner.java +++ b/common/src/main/java/com/jab125/classloader/impl/ClassScanner.java @@ -35,8 +35,7 @@ public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { - var method = super.visitMethod(access, name, descriptor, signature, exceptions); - return method; + return super.visitMethod(access, name, descriptor, signature, exceptions); } @Override diff --git a/common/src/main/java/com/jab125/classloader/impl/CustomClassLoader.java b/common/src/main/java/com/jab125/classloader/impl/CustomClassLoader.java index bd21e60fd..2cdeb3722 100644 --- a/common/src/main/java/com/jab125/classloader/impl/CustomClassLoader.java +++ b/common/src/main/java/com/jab125/classloader/impl/CustomClassLoader.java @@ -1,28 +1,13 @@ package com.jab125.classloader.impl; -import com.ultreon.devices.Devices; -import com.ultreon.devices.core.Device; -import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.impl.FabricLoaderImpl; -import net.fabricmc.loader.impl.launch.FabricLauncher; -import net.fabricmc.loader.impl.launch.knot.Knot; -import net.fabricmc.loader.launch.common.FabricLauncherBase; -import net.fabricmc.tinyremapper.TinyRemapper; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Type; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.AnnotationNode; import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.MethodNode; -import org.spongepowered.asm.util.asm.ASM; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; -import java.security.SecureClassLoader; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; diff --git a/common/src/main/java/com/jab125/version/SemanticVersionImpl.java b/common/src/main/java/com/jab125/version/SemanticVersionImpl.java index f5cffbd27..d4e6fe9e1 100644 --- a/common/src/main/java/com/jab125/version/SemanticVersionImpl.java +++ b/common/src/main/java/com/jab125/version/SemanticVersionImpl.java @@ -16,6 +16,8 @@ package com.jab125.version; +import org.jetbrains.annotations.NotNull; + import java.util.Arrays; import java.util.Objects; import java.util.Optional; @@ -246,7 +248,7 @@ public boolean equalsComponentsExactly(SemanticVersionImpl other) { } @Override - public int compareTo(Version other) { + public int compareTo(@NotNull Version other) { if (!(other instanceof SemanticVersion)) { return getFriendlyString().compareTo(other.getFriendlyString()); } diff --git a/common/src/main/java/com/jab125/version/VersionInterval.java b/common/src/main/java/com/jab125/version/VersionInterval.java index cd8f0dc27..5f614efbb 100644 --- a/common/src/main/java/com/jab125/version/VersionInterval.java +++ b/common/src/main/java/com/jab125/version/VersionInterval.java @@ -39,30 +39,30 @@ public interface VersionInterval { /** * Get the lower limit of the version interval. * - * @return Version's lower limit or null if none, inclusive depending on {@link #isMinInclusive()} + * @return Version's lower limit or null if none, inclusive depending on {@link #minInclusive()} */ - Version getMin(); + Version min(); /** * Get whether the lower limit of the version interval is inclusive. * * @return True if inclusive, false otherwise */ - boolean isMinInclusive(); + boolean minInclusive(); /** * Get the upper limit of the version interval. * - * @return Version's upper limit or null if none, inclusive depending on {@link #isMaxInclusive()} + * @return Version's upper limit or null if none, inclusive depending on {@link #maxInclusive()} */ - Version getMax(); + Version max(); /** * Get whether the upper limit of the version interval is inclusive. * * @return True if inclusive, false otherwise */ - boolean isMaxInclusive(); + boolean maxInclusive(); default VersionInterval and(VersionInterval o) { return and(this, o); diff --git a/common/src/main/java/com/jab125/version/VersionIntervalImpl.java b/common/src/main/java/com/jab125/version/VersionIntervalImpl.java index cafe994a7..7d1e29c2a 100644 --- a/common/src/main/java/com/jab125/version/VersionIntervalImpl.java +++ b/common/src/main/java/com/jab125/version/VersionIntervalImpl.java @@ -20,14 +20,10 @@ ; -public final class VersionIntervalImpl implements VersionInterval { - private final Version min; - private final boolean minInclusive; - private final Version max; - private final boolean maxInclusive; - - public VersionIntervalImpl(Version min, boolean minInclusive, - Version max, boolean maxInclusive) { +public record VersionIntervalImpl(Version min, boolean minInclusive, Version max, + boolean maxInclusive) implements VersionInterval { + public VersionIntervalImpl(Version min, boolean minInclusive, + Version max, boolean maxInclusive) { this.min = min; this.minInclusive = min != null ? minInclusive : false; this.max = max; @@ -46,44 +42,19 @@ public boolean isSemantic() { && (max == null || max instanceof SemanticVersion); } - @Override - public Version getMin() { - return min; - } - - @Override - public boolean isMinInclusive() { - return minInclusive; - } - - @Override - public Version getMax() { - return max; - } - - @Override - public boolean isMaxInclusive() { - return maxInclusive; - } @Override public boolean equals(Object obj) { if (obj instanceof VersionInterval) { VersionInterval o = (VersionInterval) obj; - return Objects.equals(min, o.getMin()) && minInclusive == o.isMinInclusive() - && Objects.equals(max, o.getMax()) && maxInclusive == o.isMaxInclusive(); + return Objects.equals(min, o.min()) && minInclusive == o.minInclusive() + && Objects.equals(max, o.max()) && maxInclusive == o.maxInclusive(); } else { return false; } } - @Override - public int hashCode() { - return (Objects.hashCode(min) + (minInclusive ? 1 : 0)) * 31 - + (Objects.hashCode(max) + (maxInclusive ? 1 : 0)) * 31; - } - @Override public String toString() { if (min == null) { @@ -110,10 +81,10 @@ public static VersionInterval and(VersionInterval a, VersionInterval b) { } private static VersionInterval andPlain(VersionInterval a, VersionInterval b) { - Version aMin = a.getMin(); - Version aMax = a.getMax(); - Version bMin = b.getMin(); - Version bMax = b.getMax(); + Version aMin = a.min(); + Version aMax = a.max(); + Version bMin = b.min(); + Version bMax = b.max(); if (aMin != null) { // -> min must be aMin or invalid if (bMin != null && !aMin.equals(bMin) || bMax != null && !aMin.equals(bMax)) { @@ -124,7 +95,7 @@ private static VersionInterval andPlain(VersionInterval a, VersionInterval b) { assert Objects.equals(aMax, bMax) || bMax == null; return a; } else { - return new VersionIntervalImpl(aMin, true, bMax, b.isMaxInclusive()); + return new VersionIntervalImpl(aMin, true, bMax, b.maxInclusive()); } } else if (aMax != null) { // -> min must be bMin, max must be aMax or invalid if (bMin != null && !aMax.equals(bMin) || bMax != null && !aMax.equals(bMax)) { @@ -158,24 +129,24 @@ private static VersionInterval andSemantic(VersionInterval a, VersionInterval b) } else if (minCmp < 0) { // aMin < bMin, aMax != bMax -> b..min(a,b) if (maxCmp > 0) return b; // a > b -> b - SemanticVersion aMax = (SemanticVersion) a.getMax(); - SemanticVersion bMin = (SemanticVersion) b.getMin(); + SemanticVersion aMax = (SemanticVersion) a.max(); + SemanticVersion bMin = (SemanticVersion) b.min(); int cmp = bMin.compareTo((Version) aMax); - if (cmp < 0 || cmp == 0 && b.isMinInclusive() && a.isMaxInclusive()) { - return new VersionIntervalImpl(bMin, b.isMinInclusive(), aMax, a.isMaxInclusive()); + if (cmp < 0 || cmp == 0 && b.minInclusive() && a.maxInclusive()) { + return new VersionIntervalImpl(bMin, b.minInclusive(), aMax, a.maxInclusive()); } else { return null; } } else { // aMin > bMin, aMax != bMax -> a..min(a,b) if (maxCmp < 0) return a; // a < b -> a - SemanticVersion aMin = (SemanticVersion) a.getMin(); - SemanticVersion bMax = (SemanticVersion) b.getMax(); + SemanticVersion aMin = (SemanticVersion) a.min(); + SemanticVersion bMax = (SemanticVersion) b.max(); int cmp = aMin.compareTo((Version) bMax); - if (cmp < 0 || cmp == 0 && a.isMinInclusive() && b.isMaxInclusive()) { - return new VersionIntervalImpl(aMin, a.isMinInclusive(), bMax, b.isMaxInclusive()); + if (cmp < 0 || cmp == 0 && a.minInclusive() && b.maxInclusive()) { + return new VersionIntervalImpl(aMin, a.minInclusive(), bMax, b.maxInclusive()); } else { return null; } @@ -244,7 +215,7 @@ private static void merge(VersionInterval a, List out) { if (out.size() == 1) { VersionInterval e = out.get(0); - if (e.getMin() == null && e.getMax() == null) { + if (e.min() == null && e.max() == null) { return; } } @@ -257,29 +228,29 @@ private static void merge(VersionInterval a, List out) { } private static void mergePlain(VersionInterval a, List out) { - Version aMin = a.getMin(); - Version aMax = a.getMax(); + Version aMin = a.min(); + Version aMax = a.max(); Version v = aMin != null ? aMin : aMax; assert v != null; for (int i = 0; i < out.size(); i++) { VersionInterval c = out.get(i); - if (v.equals(c.getMin())) { + if (v.equals(c.min())) { if (aMin == null) { - assert aMax.equals(c.getMin()); + assert aMax.equals(c.min()); out.clear(); out.add(INFINITE); - } else if (aMax == null && c.getMax() != null) { + } else if (aMax == null && c.max() != null) { out.set(i, a); } return; - } else if (v.equals(c.getMax())) { - assert c.getMin() == null; + } else if (v.equals(c.max())) { + assert c.min() == null; if (aMax == null) { - assert aMin.equals(c.getMax()); + assert aMin.equals(c.max()); out.clear(); out.add(INFINITE); } @@ -292,8 +263,8 @@ private static void mergePlain(VersionInterval a, List out) { } private static void mergeSemantic(VersionInterval a, List out) { - SemanticVersion aMin = (SemanticVersion) a.getMin(); - SemanticVersion aMax = (SemanticVersion) a.getMax(); + SemanticVersion aMin = (SemanticVersion) a.min(); + SemanticVersion aMax = (SemanticVersion) a.max(); if (aMin == null && aMax == null) { out.clear(); @@ -305,15 +276,15 @@ private static void mergeSemantic(VersionInterval a, List out) VersionInterval c = out.get(i); if (!c.isSemantic()) continue; - SemanticVersion cMin = (SemanticVersion) c.getMin(); - SemanticVersion cMax = (SemanticVersion) c.getMax(); + SemanticVersion cMin = (SemanticVersion) c.min(); + SemanticVersion cMax = (SemanticVersion) c.max(); int cmp; if (aMin == null) { // ..a..] if (cMax == null) { // ..a..] [..c.. cmp = aMax.compareTo((Version) cMin); - if (cmp < 0 || cmp == 0 && !a.isMaxInclusive() && !c.isMinInclusive()) { // ..a..]..[..c.. or ..a..)(..c.. + if (cmp < 0 || cmp == 0 && !a.maxInclusive() && !c.minInclusive()) { // ..a..]..[..c.. or ..a..)(..c.. out.add(i, a); } else { // ..a..|..c.. or ..a.[..].c.. out.clear(); @@ -332,10 +303,10 @@ private static void mergeSemantic(VersionInterval a, List out) } else { // aMax < cMax cmp = aMax.compareTo((Version) cMin); - if (cmp < 0 || cmp == 0 && !a.isMaxInclusive() && !c.isMinInclusive()) { // ..a..]..[..c..] or ..a..)(..c..] + if (cmp < 0 || cmp == 0 && !a.maxInclusive() && !c.minInclusive()) { // ..a..]..[..c..] or ..a..)(..c..] out.add(i, a); } else { // c extends a to the right - out.set(i, new VersionIntervalImpl(null, false, cMax, c.isMaxInclusive())); + out.set(i, new VersionIntervalImpl(null, false, cMax, c.maxInclusive())); } return; @@ -352,29 +323,29 @@ private static void mergeSemantic(VersionInterval a, List out) } else { // aMin < cMin cmp = aMax.compareTo((Version) cMin); - if (cmp < 0 || cmp == 0 && !a.isMaxInclusive() && !c.isMinInclusive()) { // [..a..]..[..c.. or [..a..)(..c.. + if (cmp < 0 || cmp == 0 && !a.maxInclusive() && !c.minInclusive()) { // [..a..]..[..c.. or [..a..)(..c.. out.add(i, a); } else { // a extends c to the left - out.set(i, new VersionIntervalImpl(aMin, a.isMinInclusive(), null, false)); + out.set(i, new VersionIntervalImpl(aMin, a.minInclusive(), null, false)); } } return; - } else if ((cmp = aMin.compareTo((Version) cMax)) < 0 || cmp == 0 && (a.isMinInclusive() || c.isMaxInclusive())) { + } else if ((cmp = aMin.compareTo((Version) cMax)) < 0 || cmp == 0 && (a.minInclusive() || c.maxInclusive())) { int cmp2; - if (aMax == null || cMin == null || (cmp2 = aMax.compareTo((Version) cMin)) > 0 || cmp2 == 0 && (a.isMaxInclusive() || c.isMinInclusive())) { + if (aMax == null || cMin == null || (cmp2 = aMax.compareTo((Version) cMin)) > 0 || cmp2 == 0 && (a.maxInclusive() || c.minInclusive())) { int cmpMin = compareMin(a, c); int cmpMax = compareMax(a, c); if (cmpMax <= 0) { // aMax <= cMax if (cmpMin < 0) { // aMin < cMin - out.set(i, new VersionIntervalImpl(aMin, a.isMinInclusive(), cMax, c.isMaxInclusive())); + out.set(i, new VersionIntervalImpl(aMin, a.minInclusive(), cMax, c.maxInclusive())); } return; } else if (cmpMin > 0) { // aMin > cMin, aMax > cMax - a = new VersionIntervalImpl(cMin, c.isMinInclusive(), aMax, a.isMaxInclusive()); + a = new VersionIntervalImpl(cMin, c.minInclusive(), aMax, a.maxInclusive()); } out.remove(i); @@ -390,8 +361,8 @@ private static void mergeSemantic(VersionInterval a, List out) } private static int compareMin(VersionInterval a, VersionInterval b) { - SemanticVersion aMin = (SemanticVersion) a.getMin(); - SemanticVersion bMin = (SemanticVersion) b.getMin(); + SemanticVersion aMin = (SemanticVersion) a.min(); + SemanticVersion bMin = (SemanticVersion) b.min(); int cmp; if (aMin == null) { // a <= b @@ -400,9 +371,9 @@ private static int compareMin(VersionInterval a, VersionInterval b) { } else { // bMin != null -> a < b return -1; } - } else if (bMin == null || (cmp = aMin.compareTo((Version) bMin)) > 0 || cmp == 0 && !a.isMinInclusive() && b.isMinInclusive()) { // a > b + } else if (bMin == null || (cmp = aMin.compareTo((Version) bMin)) > 0 || cmp == 0 && !a.minInclusive() && b.minInclusive()) { // a > b return 1; - } else if (cmp < 0 || a.isMinInclusive() && !b.isMinInclusive()) { // a < b + } else if (cmp < 0 || a.minInclusive() && !b.minInclusive()) { // a < b return -1; } else { // cmp == 0 && a.minInclusive() == b.minInclusive() -> a == b return 0; @@ -410,8 +381,8 @@ private static int compareMin(VersionInterval a, VersionInterval b) { } private static int compareMax(VersionInterval a, VersionInterval b) { - SemanticVersion aMax = (SemanticVersion) a.getMax(); - SemanticVersion bMax = (SemanticVersion) b.getMax(); + SemanticVersion aMax = (SemanticVersion) a.max(); + SemanticVersion bMax = (SemanticVersion) b.max(); int cmp; if (aMax == null) { // a >= b @@ -420,9 +391,9 @@ private static int compareMax(VersionInterval a, VersionInterval b) { } else { // bMax != null -> a > b return 1; } - } else if (bMax == null || (cmp = aMax.compareTo((Version) bMax)) < 0 || cmp == 0 && !a.isMaxInclusive() && b.isMaxInclusive()) { // a < b + } else if (bMax == null || (cmp = aMax.compareTo((Version) bMax)) < 0 || cmp == 0 && !a.maxInclusive() && b.maxInclusive()) { // a < b return -1; - } else if (cmp > 0 || a.isMaxInclusive() && !b.isMaxInclusive()) { // a > b + } else if (cmp > 0 || a.maxInclusive() && !b.maxInclusive()) { // a > b return 1; } else { // cmp == 0 && a.maxInclusive() == b.maxInclusive() -> a == b return 0; @@ -432,20 +403,20 @@ private static int compareMax(VersionInterval a, VersionInterval b) { public static List not(VersionInterval interval) { if (interval == null) { // () = empty interval -> infinite return Collections.singletonList(INFINITE); - } else if (interval.getMin() == null) { // (-∞, = at least half-open towards min - if (interval.getMax() == null) { // (-∞,∞) = infinite -> empty + } else if (interval.min() == null) { // (-∞, = at least half-open towards min + if (interval.max() == null) { // (-∞,∞) = infinite -> empty return Collections.emptyList(); } else { // (-∞,x = left open towards min -> half open towards max - return Collections.singletonList(new VersionIntervalImpl(interval.getMax(), !interval.isMaxInclusive(), null, false)); + return Collections.singletonList(new VersionIntervalImpl(interval.max(), !interval.maxInclusive(), null, false)); } - } else if (interval.getMax() == null) { // x,∞) = half open towards max -> half open towards min - return Collections.singletonList(new VersionIntervalImpl(null, false, interval.getMin(), !interval.isMinInclusive())); - } else if (interval.getMin().equals(interval.getMax()) && !interval.isMinInclusive() && !interval.isMaxInclusive()) { // (x,x) = effectively empty interval -> infinite + } else if (interval.max() == null) { // x,∞) = half open towards max -> half open towards min + return Collections.singletonList(new VersionIntervalImpl(null, false, interval.min(), !interval.minInclusive())); + } else if (interval.min().equals(interval.max()) && !interval.minInclusive() && !interval.maxInclusive()) { // (x,x) = effectively empty interval -> infinite return Collections.singletonList(INFINITE); } else { // closed interval -> 2 half open intervals on each side List ret = new ArrayList<>(2); - ret.add(new VersionIntervalImpl(null, false, interval.getMin(), !interval.isMinInclusive())); - ret.add(new VersionIntervalImpl(interval.getMax(), !interval.isMaxInclusive(), null, false)); + ret.add(new VersionIntervalImpl(null, false, interval.min(), !interval.minInclusive())); + ret.add(new VersionIntervalImpl(interval.max(), !interval.maxInclusive(), null, false)); return ret; } diff --git a/common/src/main/java/com/jab125/version/VersionPredicateParser.java b/common/src/main/java/com/jab125/version/VersionPredicateParser.java index deb873047..14ed50572 100644 --- a/common/src/main/java/com/jab125/version/VersionPredicateParser.java +++ b/common/src/main/java/com/jab125/version/VersionPredicateParser.java @@ -250,7 +250,7 @@ public String toString() { StringBuilder ret = new StringBuilder(); for (SingleVersionPredicate predicate : predicates) { - if (ret.length() > 0) ret.append(' '); + if (!ret.isEmpty()) ret.append(' '); ret.append(predicate.toString()); } diff --git a/common/src/main/java/com/ultreon/devices/api/app/SystemAccessor.java b/common/src/main/java/com/ultreon/devices/api/app/SystemAccessor.java deleted file mode 100644 index 30aa91539..000000000 --- a/common/src/main/java/com/ultreon/devices/api/app/SystemAccessor.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ultreon.devices.api.app; - -public interface SystemAccessor { - - public void sendSystem(System system); -} diff --git a/common/src/main/java/com/ultreon/devices/api/video/CustomResolution.java b/common/src/main/java/com/ultreon/devices/api/video/CustomResolution.java deleted file mode 100644 index f76407dbc..000000000 --- a/common/src/main/java/com/ultreon/devices/api/video/CustomResolution.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ultreon.devices.api.video; - -import com.ultreon.devices.programs.system.DisplayResolution; - -public record CustomResolution(int width, int height) implements DisplayResolution { -} diff --git a/common/src/main/java/com/ultreon/devices/block/ClientLaptopWrapper.java b/common/src/main/java/com/ultreon/devices/block/ClientLaptopWrapper.java deleted file mode 100644 index 57fbe6f92..000000000 --- a/common/src/main/java/com/ultreon/devices/block/ClientLaptopWrapper.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.ultreon.devices.block; - -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.Laptop; -import net.minecraft.client.Minecraft; - -public class ClientLaptopWrapper { - - public static void execute(ComputerBlockEntity laptop) { - Minecraft.getInstance().setScreen(new Laptop(laptop)); - } -} diff --git a/common/src/main/java/com/ultreon/devices/block/ColoredBlock.java b/common/src/main/java/com/ultreon/devices/block/ColoredBlock.java deleted file mode 100644 index b2e8fc284..000000000 --- a/common/src/main/java/com/ultreon/devices/block/ColoredBlock.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ultreon.devices.block; - -import com.ultreon.devices.util.Colored; - -public interface ColoredBlock extends Colored { -} diff --git a/common/src/main/java/com/ultreon/devices/block/entity/LaptopBlockEntity.java b/common/src/main/java/com/ultreon/devices/block/entity/LaptopBlockEntity.java deleted file mode 100644 index 87c3f4fca..000000000 --- a/common/src/main/java/com/ultreon/devices/block/entity/LaptopBlockEntity.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ultreon.devices.block.entity; - -import com.ultreon.devices.init.DeviceBlockEntities; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.state.BlockState; - -public class LaptopBlockEntity extends ComputerBlockEntity { - private int attachmentCooldown; - - public LaptopBlockEntity(BlockPos pWorldPosition, BlockState pBlockState) { - super(DeviceBlockEntities.LAPTOP.get(), pWorldPosition, pBlockState); - } - - @Override - public void tick() { - super.tick(); - - if (attachmentCooldown > 0) { - attachmentCooldown--; - } - } - - public void setAttachmentCooldown(int ticks) { - this.attachmentCooldown = Math.max(ticks, 0); - } - - public boolean canChangeAttachment() { - return this.attachmentCooldown <= 0; - } -} diff --git a/common/src/main/java/com/ultreon/devices/block/entity/renderer/PrinterRenderer.java b/common/src/main/java/com/ultreon/devices/block/entity/renderer/PrinterRenderer.java deleted file mode 100644 index 9c83b1374..000000000 --- a/common/src/main/java/com/ultreon/devices/block/entity/renderer/PrinterRenderer.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.ultreon.devices.block.entity.renderer; - -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Axis; -import com.ultreon.devices.Devices; -import com.ultreon.devices.Reference; -import com.ultreon.devices.block.PrinterBlock; -import com.ultreon.devices.block.entity.PrinterBlockEntity; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; -import net.minecraft.client.model.Model; -import net.minecraft.client.model.geom.ModelLayerLocation; -import net.minecraft.client.model.geom.ModelPart; -import net.minecraft.client.model.geom.PartPose; -import net.minecraft.client.model.geom.builders.CubeListBuilder; -import net.minecraft.client.model.geom.builders.LayerDefinition; -import net.minecraft.client.model.geom.builders.MeshDefinition; -import net.minecraft.client.model.geom.builders.PartDefinition; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.client.renderer.blockentity.SignRenderer; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.NotNull; -import org.joml.Quaternionf; -import org.joml.Vector3f; - -import java.awt.*; -import java.util.Objects; - -/** - * @author MrCrayfish - */ -public record PrinterRenderer( - BlockEntityRendererProvider.Context context) implements BlockEntityRenderer { - @Override - public void render(PrinterBlockEntity blockEntity, float partialTick, @NotNull PoseStack pose, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { - // PaperModel paperModel = new PaperModel(Minecraft.getInstance().getEntityModels().bakeLayer(PaperModel.LAYER_LOCATION)); - - // Tesselator tesselator = Tesselator.getInstance(); - BlockState state = Objects.requireNonNull(blockEntity.getLevel()).getBlockState(blockEntity.getBlockPos()); - if (state.getBlock() != blockEntity.getBlock()) return; - - pose.pushPose(); - { - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - // pose.translate(blockEntity.getBlockPos().getX(), blockEntity.getBlockPos().getY(), blockEntity.getBlockPos().getZ()); - - if (blockEntity.hasPaper()) { - pose.pushPose(); - { - pose.translate(0.5, 0.5, 0.5); - pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); - pose.mulPose(new Quaternionf(1, 0, 0, 22.5f)); - pose.translate(0, 0, 0.4); - pose.translate(-11 * 0.015625, -13 * 0.015625, -0.5 * 0.015625); - - // BUFFER START - // BufferBuilder builder = bufferSource.getBuffer(); - - // MultiBufferSource.BufferSource modelBufferSource = MultiBufferSource.immediate(builder); - // VertexConsumer vertexconsumer = modelBufferSource.getBuffer(paperModel.renderType(PaperModel.TEXTURE)); - //paperModel.renderToBuffer(pose, vertexconsumer, 15728880, OverlayTexture.NO_OVERLAY, 1f, 1f, 1f, 1f); - - // tesselator.end(); - // BUFFER END - } - pose.popPose(); - } - - pose.pushPose(); - { - if (blockEntity.isLoading()) { - pose.translate(0.5, 0.5, 0.5); - pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); - pose.mulPose(new Quaternionf(1, 0, 0, 22.5f)); - double progress = Math.max(-0.4, -0.4 + (0.4 * ((double) (blockEntity.getRemainingPrintTime() - 10) / 20))); - pose.translate(0, progress, 0.36875); - pose.translate(-11 * 0.015625, -13 * 0.015625, -0.5 * 0.015625); - - // BUFFER START - // BufferBuilder builder = tesselator.getBuilder(); - - // MultiBufferSource.BufferSource buffer = MultiBufferSource.immediate(builder); - // VertexConsumer vertexconsumer = buffer.getBuffer(paperModel.renderType(PaperModel.TEXTURE)); - // paperModel.renderToBuffer(pose, vertexconsumer, 15728880, OverlayTexture.NO_OVERLAY, 1f, 1f, 1f, 1f); - - // tesselator.end(); - // BUFFER END - } else if (blockEntity.isPrinting()) { - pose.translate(0.5, 0.078125, 0.5); - pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); - pose.mulPose(new Quaternionf(1, 0, 0, 90f)); - double progress = -0.35 + (0.50 * ((double) (blockEntity.getRemainingPrintTime() - 20) / blockEntity.getTotalPrintTime())); - pose.translate(0, progress, 0); - pose.translate(-11 * 0.015625, -13 * 0.015625, -0.5 * 0.015625); - - // BUFFER START - // BufferBuilder builder = tesselator.getBuilder(); - - // MultiBufferSource.BufferSource buffer = MultiBufferSource.immediate(builder); - // // VertexConsumer vertexconsumer = buffer.getBuffer(paperModel.renderType(PaperModel.TEXTURE)); - // paperModel.renderToBuffer(pose, vertexconsumer, 15728880, OverlayTexture.NO_OVERLAY, 1f, 1f, 1f, 1f); - - // tesselator.end(); - // BUFFER END - - pose.translate(0.3225, 0.085, -0.001); - pose.mulPose(new Quaternionf(0, 1, 0, 180f)); - pose.scale(0.3f, 0.3f, 0.3f); - - // IPrint print = blockEntity.getPrint(); - // if (print != null) { - // IPrint.Renderer renderer = PrintingManager.getRenderer(print); - // renderer.render(pose, print.toTag()); - // } - } - } - pose.popPose(); - - pose.pushPose(); // mulPose == rotation - { - RenderSystem.depthMask(false); - pose.translate(0.5, 0.5, 0.5); - // pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); - // pose.mulPose(new Quaternion(180, 0, 0, 0)); - pose.translate(-0.0675, 0.005, -0.032); - pose.translate(0.8125, 0, -0.315); - pose.translate(-6.5 * 0.0625, -3.5 * 0.0625, 3.01 * 0.0625); - // pose.translate(0, 3, 0); - pose.pushPose(); - pose.mulPose(Axis.of(new Vector3f(22.5f, 180, 0)).rotationDegrees(0)); - // pose.pushPose(); - // pose.scale(0.1f, -0.1f, 0.1f); - pose.scale(0.010416667f, -0.010416667f, 0.010416667f); - Minecraft.getInstance().font.drawInBatch(Integer.toString(blockEntity.getPaperCount()), Minecraft.getInstance().font.width("00")-Minecraft.getInstance().font.width(Integer.toString(blockEntity.getPaperCount())), 0, Color.WHITE.getRGB(), false, pose.last().pose(), bufferSource, Font.DisplayMode.NORMAL, 0x00000000, packedLight); - pose.popPose(); - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - RenderSystem.depthMask(true); - } - pose.popPose(); - } - pose.popPose(); - -// pose.pushPose(); -// { -// pose.translate(0, -0.5, 0); -// Minecraft.getInstance().getBlockRenderer().renderSingleBlock(state, pose, bufferSource, packedLight, packedOverlay, EmptyModelData.INSTANCE); -// super.render(blockEntity, x, y, z, partialTicks, destroyStage, alpha); -// } -// pose.popPose(); - } - - public static class PaperModel extends Model { - public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.MOD_ID, "textures/model/paper.png"); - public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(Devices.id("paper_model"), "main"); - private final ModelPart root; -// private final ModelPart main; - -// private final ModelRenderer box = new ModelRenderer(this, 0, 0).addBox(0, 0, 0, 22, 30, 1); - - public PaperModel(ModelPart pRoot) { - super(RenderType::entitySolid); - this.root = pRoot; -// this.main = pRoot.getChild("main"); - } - - public static LayerDefinition createBodyLayer() { - MeshDefinition meshdefinition = new MeshDefinition(); - PartDefinition partdefinition = meshdefinition.getRoot(); - partdefinition.addOrReplaceChild("main", CubeListBuilder.create().texOffs(0, 0).addBox(0, 0, 0, 22, 30, 1), PartPose.offset(0f, 0f, 0f)); - return LayerDefinition.create(meshdefinition, 64, 32); - } - - @Override - public void renderToBuffer(@NotNull PoseStack pPoseStack, @NotNull VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, float pRed, float pGreen, float pBlue, float pAlpha) { - this.render(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); - } - - private void render(PoseStack pPoseStack, VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, float pRed, float pGreen, float pBlue, float pAlpha) { - RenderSystem.setShaderTexture(0, TEXTURE); - this.root.render(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); - } - -// public ModelPart getMain() { -// return main; -// } - } -} diff --git a/common/src/main/java/com/ultreon/devices/compat/AdvancedDebugExt.java b/common/src/main/java/com/ultreon/devices/compat/AdvancedDebugExt.java new file mode 100644 index 000000000..506d7c8cd --- /dev/null +++ b/common/src/main/java/com/ultreon/devices/compat/AdvancedDebugExt.java @@ -0,0 +1,92 @@ +//package com.ultreon.devices.compat; +// +//import com.ultreon.devices.Devices; +//import com.ultreon.devices.block.entity.*; +//import com.ultreon.mods.advanceddebug.api.extension.Extension; +//import com.ultreon.mods.advanceddebug.api.extension.ExtensionInfo; +//import com.ultreon.mods.advanceddebug.util.ImGuiEx; +//import imgui.ImGui; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.item.Items; +//import net.minecraft.world.level.block.entity.BlockEntity; +// +//import java.util.Objects; +// +///** +// * This class represents an advanced debugging extension. +// */ +//@ExtensionInfo(Devices.MOD_ID) +//public class AdvancedDebugExt implements Extension { +// @Override +// public void handleBlockEntity(BlockEntity blockEntity) { +// if (!(blockEntity instanceof DeviceBlockEntity device) || !ImGui.collapsingHeader("Network Device")) { +// return; +// } +// displayCommonDeviceDetails(device); +// +// if (blockEntity instanceof DeviceBlockEntity.Colored colored) { +// handleColoredDevice(colored); +// } +// if (blockEntity instanceof NetworkDeviceBlockEntity networkDevice && ImGui.collapsingHeader("Connection")) { +// handleNetworkDevice(networkDevice); +// } +// if (blockEntity instanceof PrinterBlockEntity printer && ImGui.collapsingHeader("Printer")) { +// handlePrinter(printer); +// } +// if (blockEntity instanceof ComputerBlockEntity computer && ImGui.collapsingHeader("Printer")) { +// handleComputer(computer); +// } +// if (blockEntity instanceof RouterBlockEntity router && ImGui.collapsingHeader("Printer")) { +// handleRouter(router); +// } +// +// ImGui.treePop(); +// } +// +// private void displayCommonDeviceDetails(DeviceBlockEntity device) { +// ImGui.treePush(); +// ImGuiEx.text("Display Name: ", () -> device.getDisplayName()); +// ImGuiEx.text("Device Name: ", () -> device.getDeviceName()); +// ImGuiEx.nbt("Pipeline: ", () -> device.getPipeline()); +// ImGuiEx.editString("Custom Name: ", createDevicePropertyIdentifier(device, "customName"), () -> device.hasCustomName() ? device.getCustomName() : "", device::setCustomName); +// } +// +// private void handleColoredDevice(DeviceBlockEntity.Colored colored) { +// ImGuiEx.editEnum("Color: ", createDevicePropertyIdentifier(colored, "color"), colored::getColor, colored::setColor); +// } +// +// private void handleNetworkDevice(NetworkDeviceBlockEntity networkDevice) { +// ImGui.treePush(); +// ImGuiEx.bool("Is Connected: ", () -> networkDevice.getConnection().isConnected()); +// ImGuiEx.text("Router ID: ", () -> networkDevice.getConnection().getRouterId()); +// ImGuiEx.text("Router Position: ", () -> Objects.requireNonNull(networkDevice.getConnection().getRouterPos()).toShortString()); +// ImGui.treePop(); +// } +// +// private void handlePrinter(PrinterBlockEntity printer) { +// ImGui.treePush(); +// ImGuiEx.editEnum("State: ", createDevicePropertyIdentifier(printer, "state"), printer::getState, printer::setState); +// ImGuiEx.button("Add Paper: ", createDevicePropertyIdentifier(printer, "addPaper"), () -> printer.addPaper(new ItemStack(Items.PAPER), true)); +// ImGui.treePop(); +// } +// +// private void handleComputer(ComputerBlockEntity computer) { +// ImGui.treePush(); +// ImGuiEx.nbt("Application Data: ", () -> computer.getApplicationData()); +// ImGuiEx.nbt("System Data: ", () -> computer.getSystemData()); +// ImGuiEx.editEnum("External Drive Color: ", createDevicePropertyIdentifier(computer, "externalDriveColor"), computer::getExternalDriveColor, v -> { +// }); +// ImGui.treePop(); +// } +// +// private void handleRouter(RouterBlockEntity router) { +// ImGui.treePush(); +// ImGuiEx.text("UUID: ", () -> router.getRouter().getId()); +// ImGuiEx.text("Pos: ", () -> router.getRouter().getPos()); +// ImGui.treePop(); +// } +// +// private String createDevicePropertyIdentifier(DeviceBlockEntity device, String propertyName) { +// return "$$BlockEntity[" + device.getId() + "]::" + propertyName; +// } +//} diff --git a/common/src/main/java/com/ultreon/devices/debug/DebugLog.java b/common/src/main/java/com/ultreon/devices/debug/DebugLog.java deleted file mode 100644 index 7487f9753..000000000 --- a/common/src/main/java/com/ultreon/devices/debug/DebugLog.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ultreon.devices.debug; - -import com.ultreon.devices.Devices; -import dev.architectury.platform.Platform; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.Marker; -import org.slf4j.MarkerFactory; - -import java.util.Arrays; -import java.util.Objects; - -public class DebugLog { - private static final Logger LOGGER = LoggerFactory.getLogger("Devices : Debugger"); - - public static void log(String message) { - if (Platform.isDevelopmentEnvironment()) { - LOGGER.info(message); - } - } - - public static void log(Object... message) { - log(String.join(" ", Arrays.stream(message).map(Objects::toString).toList())); - } - - public static void logTime(long ticks, String message) { - if (Platform.isDevelopmentEnvironment()) { - LOGGER.info("(@" + ticks + " ticks) " + message); - } - } -} diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceBlockEntities.java b/common/src/main/java/com/ultreon/devices/init/DeviceBlockEntities.java deleted file mode 100644 index 555c76d7f..000000000 --- a/common/src/main/java/com/ultreon/devices/init/DeviceBlockEntities.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ultreon.devices.init; - -import com.ultreon.devices.Devices; -import com.ultreon.devices.block.entity.*; -import dev.architectury.registry.registries.Registrar; -import dev.architectury.registry.registries.RegistrySupplier; -import net.minecraft.core.registries.Registries; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntityType; - -@SuppressWarnings("ConstantConditions") -public class DeviceBlockEntities { - private static final Registrar> REGISTER = Devices.REGISTRIES.get().get(Registries.BLOCK_ENTITY_TYPE); - - public static final RegistrySupplier> PAPER = REGISTER.register(Devices.id("paper"), () -> BlockEntityType.Builder.of(PaperBlockEntity::new, DeviceBlocks.PAPER.get()).build(null)); - public static final RegistrySupplier> LAPTOP = REGISTER.register(Devices.id("laptop"), () -> BlockEntityType.Builder.of(LaptopBlockEntity::new, DeviceBlocks.getAllLaptops().toArray(new Block[]{})).build(null)); - public static final RegistrySupplier> MAC_MAX_X = REGISTER.register(Devices.id("mac_max_x"), () -> BlockEntityType.Builder.of(MacMaxXBlockEntity::new, DeviceBlocks.MAC_MAX_X.get()).build(null)); - public static final RegistrySupplier> PRINTER = REGISTER.register(Devices.id("printer"), () -> BlockEntityType.Builder.of(PrinterBlockEntity::new, DeviceBlocks.getAllPrinters().toArray(new Block[]{})).build(null)); - public static final RegistrySupplier> ROUTER = REGISTER.register(Devices.id("router"), () -> BlockEntityType.Builder.of(RouterBlockEntity::new, DeviceBlocks.getAllRouters().toArray(new Block[]{})).build(null)); - public static final RegistrySupplier> SEAT = REGISTER.register(Devices.id("seat"), () -> BlockEntityType.Builder.of(OfficeChairBlockEntity::new, DeviceBlocks.getAllOfficeChairs().toArray(new Block[]{})).build(null)); - - public static void register() { - // Marker - } -} diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceEntities.java b/common/src/main/java/com/ultreon/devices/init/DeviceEntities.java deleted file mode 100644 index cb9acf01c..000000000 --- a/common/src/main/java/com/ultreon/devices/init/DeviceEntities.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.ultreon.devices.init; - -import com.ultreon.devices.Devices; -import com.ultreon.devices.entity.SeatEntity; -import dev.architectury.registry.registries.Registrar; -import dev.architectury.registry.registries.RegistrySupplier; -import net.minecraft.core.registries.Registries; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MobCategory; - -public class DeviceEntities { - private static final Registrar> REGISTER = Devices.REGISTRIES.get().get(Registries.ENTITY_TYPE); - - public static final RegistrySupplier> SEAT = REGISTER.register(Devices.id("seat"), () -> EntityType.Builder.of(SeatEntity::new, MobCategory.MISC).sized(0.5f, 1.975f).clientTrackingRange(10).noSummon().build(Devices.id("seat").toString())); - - public static void register() { - - } -} diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceEntityRenderers.java b/common/src/main/java/com/ultreon/devices/init/DeviceEntityRenderers.java deleted file mode 100644 index 4e84b7780..000000000 --- a/common/src/main/java/com/ultreon/devices/init/DeviceEntityRenderers.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.ultreon.devices.init; - -import com.ultreon.devices.Devices; -import com.ultreon.devices.entity.renderer.SeatEntityRenderer; -import dev.architectury.registry.client.level.entity.EntityRendererRegistry; -import dev.architectury.registry.registries.Registrar; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.core.Registry; -import net.minecraft.world.level.block.Block; - -public class DeviceEntityRenderers { - static { - EntityRendererRegistry.register(DeviceEntities.SEAT::get, SeatEntityRenderer::new); - } - - public static void register() { - - } -} diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceSounds.java b/common/src/main/java/com/ultreon/devices/init/DeviceSounds.java deleted file mode 100644 index 83f882404..000000000 --- a/common/src/main/java/com/ultreon/devices/init/DeviceSounds.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ultreon.devices.init; - -import com.ultreon.devices.Devices; -import dev.architectury.registry.registries.Registrar; -import dev.architectury.registry.registries.RegistrySupplier; -import net.minecraft.core.registries.Registries; -import net.minecraft.sounds.SoundEvent; - -/** - * @author MrCrayfish - */ -public class DeviceSounds { - private static final Registrar REGISTER = Devices.REGISTRIES.get().get(Registries.SOUND_EVENT); - - public static final RegistrySupplier PRINTER_PRINTING = REGISTER.register(Devices.id("printer_printing"), () -> SoundEvent.createVariableRangeEvent(Devices.id("printer_printing"))); - public static final RegistrySupplier PRINTER_LOADING_PAPER = REGISTER.register(Devices.id("printer_loading_paper"), () -> SoundEvent.createVariableRangeEvent(Devices.id("printer_loading_paper"))); - - public static void register() { - - } -} diff --git a/common/src/main/java/com/ultreon/devices/item/ComponentItem.java b/common/src/main/java/com/ultreon/devices/item/ComponentItem.java deleted file mode 100644 index e14d817e5..000000000 --- a/common/src/main/java/com/ultreon/devices/item/ComponentItem.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.ultreon.devices.item; - -import com.ultreon.devices.Devices; -import net.minecraft.world.item.Item; - -public class ComponentItem extends Item { - public ComponentItem(Properties pProperties) { - super(pProperties.arch$tab(Devices.TAB_DEVICE)); - } -} diff --git a/common/src/main/java/com/ultreon/devices/item/EthernetCableItem.java b/common/src/main/java/com/ultreon/devices/item/EthernetCableItem.java deleted file mode 100644 index 1f04a1b61..000000000 --- a/common/src/main/java/com/ultreon/devices/item/EthernetCableItem.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.ultreon.devices.item; - -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.Devices; -import com.ultreon.devices.block.entity.NetworkDeviceBlockEntity; -import com.ultreon.devices.block.entity.RouterBlockEntity; -import com.ultreon.devices.core.network.Router; -import com.ultreon.devices.util.KeyboardHelper; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.ChatFormatting; -import net.minecraft.Util; -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.ChatType; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.entity.BlockEntity; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -/** - * @author MrCrayfish - */ -public class EthernetCableItem extends Item { - public EthernetCableItem() { - super(new Properties().arch$tab(Devices.TAB_DEVICE).stacksTo(1)); - } - - private static double getDistance(BlockPos source, BlockPos target) { - return Math.sqrt(source.distToCenterSqr(target.getX() + 0.5, target.getY() + 0.5, target.getZ() + 0.5)); - } - - @Override - public InteractionResult useOn(UseOnContext context) { - Level level = context.getLevel(); - Player player = context.getPlayer(); - BlockPos pos = context.getClickedPos(); - InteractionHand hand = context.getHand(); - - if (!level.isClientSide && player != null) { - ItemStack heldItem = player.getItemInHand(hand); - BlockEntity blockEntity = level.getBlockEntity(pos); - - if (blockEntity instanceof RouterBlockEntity routerBE) { - if (!heldItem.hasTag()) { - sendGameInfoMessage(player, "message.devices.invalid_cable"); - return InteractionResult.SUCCESS; - } - - Router router = routerBE.getRouter(); - - CompoundTag tag = heldItem.getTag(); - assert tag != null; - BlockPos devicePos = BlockPos.of(tag.getLong("pos")); - - BlockEntity tileEntity1 = level.getBlockEntity(devicePos); - if (tileEntity1 instanceof NetworkDeviceBlockEntity networkDeviceBlockEntity) { - if (!router.isDeviceRegistered(networkDeviceBlockEntity)) { - if (router.addDevice(networkDeviceBlockEntity)) { - networkDeviceBlockEntity.connect(router); - heldItem.shrink(1); - if (getDistance(tileEntity1.getBlockPos(), routerBE.getBlockPos()) > DeviceConfig.SIGNAL_RANGE.get()) { - sendGameInfoMessage(player, "message.devices.successful_registered"); - } else { - sendGameInfoMessage(player, "message.devices.successful_connection"); - } - } else { - sendGameInfoMessage(player, "message.devices.router_max_devices"); - } - } else { - sendGameInfoMessage(player, "message.devices.device_already_connected"); - } - } else { - if (router.addDevice(tag.getUUID("id"), tag.getString("name"))) { - heldItem.shrink(1); - sendGameInfoMessage(player, "message.devices.successful_registered"); - } else { - sendGameInfoMessage(player, "message.devices.router_max_devices"); - } - } - return InteractionResult.SUCCESS; - } - - if (blockEntity instanceof NetworkDeviceBlockEntity networkDeviceBlockEntity) { - heldItem.setTag(new CompoundTag()); - CompoundTag tag = heldItem.getTag(); - assert tag != null; - tag.putUUID("id", networkDeviceBlockEntity.getId()); - tag.putString("name", networkDeviceBlockEntity.getCustomName()); - tag.putLong("pos", networkDeviceBlockEntity.getBlockPos().asLong()); - - sendGameInfoMessage(player, "message.devices.select_router"); - return InteractionResult.SUCCESS; - } - } - return InteractionResult.SUCCESS; - } - - private void sendGameInfoMessage(Player player, String message) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.sendSystemMessage(Component.translatable(message)); - } - } - - @NotNull - @Override - public InteractionResultHolder use(Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { - if (!level.isClientSide) { - ItemStack heldItem = player.getItemInHand(usedHand); - if (player.isCrouching()) { - heldItem.resetHoverName(); - heldItem.setTag(null); - return new InteractionResultHolder<>(InteractionResult.SUCCESS, heldItem); - } - } - return super.use(level, player, usedHand); - } - - @Override - public void appendHoverText(ItemStack stack, @org.jetbrains.annotations.Nullable Level level, @NotNull List tooltip, @NotNull TooltipFlag isAdvanced) { - if (stack.hasTag()) { - CompoundTag tag = stack.getTag(); - if (tag != null) { - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.RED.toString() + ChatFormatting.BOLD + "ID: " + ChatFormatting.RESET + tag.getUUID("id"))); - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.RED.toString() + ChatFormatting.BOLD + "Device: " + ChatFormatting.RESET + tag.getString("name"))); - - BlockPos devicePos = BlockPos.of(tag.getLong("pos")); - String text = ChatFormatting.RED.toString() + ChatFormatting.BOLD + "X: " + ChatFormatting.RESET + devicePos.getX() + " " + - ChatFormatting.RED + ChatFormatting.BOLD + "Y: " + ChatFormatting.RESET + devicePos.getY() + " " + - ChatFormatting.RED + ChatFormatting.BOLD + "Z: " + ChatFormatting.RESET + devicePos.getZ(); - tooltip.add(net.minecraft.network.chat.Component.literal(text)); - } - } else { - if (!KeyboardHelper.isShiftDown()) { - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.GRAY + "Use this cable to connect")); - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.GRAY + "a device to a router.")); - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.YELLOW + "Hold SHIFT for How-To")); - return; - } - - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.GRAY + "Start by right clicking a")); - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.GRAY + "device with this cable")); - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.GRAY + "then right click the ")); - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.GRAY + "router you want to")); - tooltip.add(net.minecraft.network.chat.Component.literal(ChatFormatting.GRAY + "connect this device to.")); - } - super.appendHoverText(stack, level, tooltip, isAdvanced); - } - - @Environment(EnvType.CLIENT) - public boolean hasEffect(ItemStack stack) { - return stack.hasTag(); - } - - @NotNull - @Override - public Component getName(ItemStack stack) { - if (stack.hasTag()) { - return super.getDescription().copy().withStyle(ChatFormatting.GRAY, ChatFormatting.BOLD); - } - return super.getName(stack); - } -} diff --git a/common/src/main/java/com/ultreon/devices/programs/email/object/Contact.java b/common/src/main/java/com/ultreon/devices/programs/email/object/Contact.java deleted file mode 100644 index 15eea7b64..000000000 --- a/common/src/main/java/com/ultreon/devices/programs/email/object/Contact.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.ultreon.devices.programs.email.object; - -import net.minecraft.nbt.CompoundTag; - -/** - * @author MrCrayfish - */ -public class Contact { - private final String nickname; - private final String email; - - public Contact(String nickname, String email) { - this.nickname = nickname; - this.email = email; - } - - public String getNickname() { - return nickname; - } - - public String getEmail() { - return email; - } - - @Override - public String toString() { - return nickname; - } - - public void save(CompoundTag contactTag) { - contactTag.putString("nickname", nickname); - contactTag.putString("email", email); - } -} diff --git a/common/src/main/java/com/ultreon/devices/util/Vulnerability.java b/common/src/main/java/com/ultreon/devices/util/Vulnerability.java deleted file mode 100644 index 4c4ef6ad9..000000000 --- a/common/src/main/java/com/ultreon/devices/util/Vulnerability.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.ultreon.devices.util; - -import com.google.common.collect.ImmutableList; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.jab125.version.Version; -import com.jab125.version.VersionPredicate; -import com.ultreon.devices.Devices; -import com.ultreon.devices.Reference; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -public record Vulnerability(@Nullable String reporter, String title, @Nullable String description, int severity, Collection affectedVersions, Collection fixVersion, boolean affectsCurrentVersion) { - public static List parseArray(JsonArray array) { - ArrayList arraylist = new ArrayList<>() { - @Override - public boolean add(@Nullable Vulnerability vulnerability) { - if (vulnerability != null) return super.add(vulnerability); - return false; - } - }; - for (JsonElement jsonElement : array) { - if (jsonElement.isJsonObject()) { - arraylist.add(parseObject(jsonElement.getAsJsonObject())); - } - } - return ImmutableList.copyOf(arraylist); - } - public static Vulnerability parseObject(JsonObject array) { - boolean hasReporter = array.has("reporter"); - boolean hasDescription = array.has("description"); - boolean hasFixVersion = array.has("fixVersions"); - Collection affectedVersions = toStringList(array.getAsJsonArray("affectedVersions")); - var d = false; - for (VersionPredicate affectedVersion : affectedVersions) { - try { - d = affectedVersion.test(Version.parse(Reference.getVerInfo()[0])); - if (d) break; - } catch (Exception e){e.printStackTrace();} - } - return new Vulnerability(hasReporter ? array.get("reporter").getAsString() : null, array.get("title").getAsString(), hasDescription ? array.get("description").getAsString() : null, array.get("severity").getAsInt(), affectedVersions, !hasFixVersion ? new ArrayList<>() : toStringList(array.get("fixVersions").getAsJsonArray()), d); - } - - private static Collection toStringList(JsonArray array) { - ArrayList l = new ArrayList<>(); - for (JsonElement jsonElement : array) { - l.add(jsonElement.getAsString()); - } - try { - return VersionPredicate.parse(l); - } catch (Exception e) { - e.printStackTrace(); // oh no - return new ArrayList<>(); - } - } - - @Override - public String toString() { - return "Vulnerability{" + - "reporter='" + reporter + '\'' + - ", title='" + title + '\'' + - ", description='" + description + '\'' + - ", severity=" + severity + - ", affectedVersions=" + affectedVersions + - ", fixVersion='" + fixVersion + '\'' + - '}'; - } - - public String toPrettyString() { - return """ - Vulnerability { - reporter = '%s' - title = '%s' - description = '%s' - severity = %s - affectedVersions = %s - fixVersion = '%s' - }""".formatted(reporter, title, description, severity, affectedVersions, fixVersion); - } - - public static class VulnerabilityTrayItem extends com.ultreon.devices.object.TrayItem { - public VulnerabilityTrayItem() { - super(vulnerabilitiesAffectUs() ? Icons.WARNING : Icons.WARNING_GRAY, Devices.id("vulnerabilities")); - } - private static boolean vulnerabilitiesAffectUs() { - return Devices.getVulnerabilities().stream().anyMatch(Vulnerability::affectsCurrentVersion); - } - private final boolean vulnerabilities = vulnerabilitiesAffectUs(); - private int tick; - private boolean stat = false; - - @Override - public void tick() { - super.tick(); - if (!vulnerabilities) return; - if (tick >= 15) { - tick = 0; - this.setIcon(stat ? Icons.FLASHED_WARNING : Icons.WARNING); - stat = !stat; - } - tick++; - } - - @Override - public void handleClick(int mouseX, int mouseY, int mouseButton) { - AppInfo info = ApplicationManager.getApplication(Devices.id("vulnerability")); - if (info != null) { - Laptop.getSystem().openApplication(info); - } - } - } - - public int effectiveSeverity() { - return affectsCurrentVersion ? severity : 0; - } -} \ No newline at end of file diff --git a/common/src/main/java/com/ultreon/devices/BuiltinApps.java b/common/src/main/java/dev/ultreon/devices/BuiltinApps.java similarity index 75% rename from common/src/main/java/com/ultreon/devices/BuiltinApps.java rename to common/src/main/java/dev/ultreon/devices/BuiltinApps.java index 3dd1527f3..c9abd0300 100644 --- a/common/src/main/java/com/ultreon/devices/BuiltinApps.java +++ b/common/src/main/java/dev/ultreon/devices/BuiltinApps.java @@ -1,16 +1,16 @@ -package com.ultreon.devices; +package dev.ultreon.devices; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.programs.BoatRacersApp; -import com.ultreon.devices.programs.NoteStashApp; -import com.ultreon.devices.programs.PixelPainterApp; -import com.ultreon.devices.programs.auction.MineBayApp; -import com.ultreon.devices.programs.email.EmailApp; -import com.ultreon.devices.programs.gitweb.GitWebApp; -import com.ultreon.devices.programs.snake.SnakeApp; -import com.ultreon.devices.programs.system.*; -import com.ultreon.devices.programs.themes.ThemesApp; import dev.architectury.platform.Platform; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.mineos.apps.BoatRacersApp; +import dev.ultreon.devices.mineos.apps.NoteStashApp; +import dev.ultreon.devices.mineos.apps.PixelPainterApp; +import dev.ultreon.devices.mineos.apps.auction.MineBayApp; +import dev.ultreon.devices.mineos.apps.email.EmailApp; +import dev.ultreon.devices.mineos.apps.gitweb.GitWebApp; +import dev.ultreon.devices.mineos.apps.snake.SnakeApp; +import dev.ultreon.devices.mineos.apps.system.*; +import dev.ultreon.devices.mineos.apps.themes.ThemesApp; import net.minecraft.resources.ResourceLocation; public class BuiltinApps { @@ -24,7 +24,7 @@ public static void registerBuiltinApps() { ApplicationManager.registerApplication(new ResourceLocation(Reference.MOD_ID, "ender_mail"), () -> EmailApp::new, false); ApplicationManager.registerApplication(new ResourceLocation(Reference.MOD_ID, "app_store"), () -> AppStore::new, true); - if (Platform.isDevelopmentEnvironment() || Devices.EARLY_CONFIG.enableBetaApps) { + if (Platform.isDevelopmentEnvironment() || UltreonDevicesMod.EARLY_CONFIG.enableBetaApps) { ApplicationManager.registerApplication(new ResourceLocation(Reference.MOD_ID, "bank"), () -> BankApp::new, false); ApplicationManager.registerApplication(new ResourceLocation(Reference.MOD_ID, "boat_racers"), () -> BoatRacersApp::new, false); ApplicationManager.registerApplication(new ResourceLocation(Reference.MOD_ID, "mine_bay"), () -> MineBayApp::new, false); diff --git a/common/src/main/java/com/ultreon/devices/ClientModEvents.java b/common/src/main/java/dev/ultreon/devices/ClientModEvents.java similarity index 78% rename from common/src/main/java/com/ultreon/devices/ClientModEvents.java rename to common/src/main/java/dev/ultreon/devices/ClientModEvents.java index 47318826d..9a1129e52 100644 --- a/common/src/main/java/com/ultreon/devices/ClientModEvents.java +++ b/common/src/main/java/dev/ultreon/devices/ClientModEvents.java @@ -1,22 +1,23 @@ -package com.ultreon.devices; +package dev.ultreon.devices; import com.mojang.blaze3d.platform.NativeImage; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.block.entity.renderer.*; -import com.ultreon.devices.client.RenderRegistry; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.debug.DebugFlags; -import com.ultreon.devices.debug.DebugUtils; -import com.ultreon.devices.debug.DumpType; -import com.ultreon.devices.init.DeviceBlockEntities; -import com.ultreon.devices.init.DeviceBlocks; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.system.object.ColorSchemePresets; import dev.architectury.platform.Platform; import dev.architectury.registry.ReloadListenerRegistry; +import dev.architectury.registry.client.level.entity.EntityModelLayerRegistry; import dev.architectury.registry.client.rendering.BlockEntityRendererRegistry; import dev.architectury.registry.client.rendering.RenderTypeRegistry; import dev.architectury.registry.registries.RegistrarManager; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.block.entity.renderer.*; +import dev.ultreon.devices.client.RenderRegistry; +import dev.ultreon.devices.debug.DebugFlags; +import dev.ultreon.devices.debug.DebugUtils; +import dev.ultreon.devices.debug.DumpType; +import dev.ultreon.devices.init.DeviceBlockEntities; +import dev.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.mineos.apps.system.object.ColorSchemePresets; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.DynamicTexture; @@ -41,29 +42,30 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; - public class ClientModEvents { private static final Marker SETUP = MarkerFactory.getMarker("SETUP"); - private static final Logger LOGGER = Devices.LOGGER; + private static final Logger LOGGER = UltreonDevicesMod.LOGGER; public static void clientSetup() { LOGGER.info("Doing some client setup."); - if (Devices.DEVELOPER_MODE) { + if (UltreonDevicesMod.DEVELOPER_MODE) { LOGGER.info(SETUP, "Adding developer wallpaper."); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/developer_wallpaper.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/developer_wallpaper.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_11.png")); } else { LOGGER.info(SETUP, "Adding default wallpapers."); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_1.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_2.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_3.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_4.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_5.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_6.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_7.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_8.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_9.png")); - Laptop.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_10.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_1.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_2.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_3.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_4.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_5.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_6.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_7.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_8.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_9.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_10.png")); + MineOS.addWallpaper(new ResourceLocation("devices:textures/gui/laptop_wallpaper_11.png")); } @@ -71,7 +73,9 @@ public static void clientSetup() { registerRenderLayers(); registerRenderers(); registerLayerDefinitions(); - if (Platform.isForge()) { // Note: Forge requires the icon atlas to be generator beforehand. + registerBlockRenderTypes(); + + if (Platform.isForgeLike()) { // Note: Forge requires the icon atlas to be generator beforehand. generateIconAtlas(); } @@ -80,6 +84,10 @@ public static void clientSetup() { ReloadListenerRegistry.register(PackType.CLIENT_RESOURCES, new ReloaderListener()); } + private static void registerBlockRenderTypes() { + DeviceBlocks.getAllLaptops().forEach(it -> RenderTypeRegistry.register(RenderType.cutout(), it)); + } + private static void registerOSContent() { ColorSchemePresets.init(); } @@ -93,7 +101,7 @@ public CompletableFuture reload(@NotNull PreparableReloadListener.Preparat LOGGER.debug("Reloading resources from the Device Mod."); return CompletableFuture.runAsync(() -> { - if (ApplicationManager.getAllApplications().size() > 0) { + if (!ApplicationManager.getAllApplications().isEmpty()) { ApplicationManager.getAllApplications().forEach(AppInfo::reload); generateIconAtlas(resourceManager); // FIXME: Broken resource reloading, can't find image resource while definitely exists. } @@ -103,7 +111,6 @@ public CompletableFuture reload(@NotNull PreparableReloadListener.Preparat } private static void registerRenderLayers() { - if (true) return; DeviceBlocks.getAllLaptops().forEach(block -> { LOGGER.debug(SETUP, "Setting render layer for laptop {}", RegistrarManager.getId(block, Registries.BLOCK)); RenderTypeRegistry.register(RenderType.cutout(), block); @@ -154,7 +161,7 @@ public boolean writeImage(AppInfo info, ResourceLocation location) { } BufferedImage icon = ImageIO.read(input); if (icon.getWidth() != ICON_SIZE || icon.getHeight() != ICON_SIZE) { - Devices.LOGGER.error("Incorrect icon size for " + (info == null ? null : info.getId()) + " (Must be 14 by 14 pixels)"); + UltreonDevicesMod.LOGGER.error("Incorrect icon size for " + (info == null ? null : info.getId()) + " (Must be 14 by 14 pixels)"); return false; } int iconU = (index % 16) * ICON_SIZE; @@ -172,16 +179,16 @@ public boolean writeImage(AppInfo info, ResourceLocation location) { } index++; if (DebugFlags.LOG_APP_ICON_STITCHES) { - Devices.LOGGER.info("Stitching texture: " + location); + UltreonDevicesMod.LOGGER.info("Stitching texture: " + location); } return true; } catch (FileNotFoundException e) { - Devices.LOGGER.error("Unable to load icon for '" + (info == null ? null : info.getId()) + "': " + e.getMessage()); + UltreonDevicesMod.LOGGER.error("Unable to load icon for '" + (info == null ? null : info.getId()) + "': " + e.getMessage()); if (DebugFlags.PRINT_MISSING_APP_ICONS_STACK_TRACES) { e.printStackTrace(); } } catch (Exception e) { - Devices.LOGGER.error("Unable to load icon for " + (info == null ? null : info.getId())); + UltreonDevicesMod.LOGGER.error("Unable to load icon for " + (info == null ? null : info.getId())); if (DebugFlags.PRINT_APP_ICONS_STACK_TRACES) { e.printStackTrace(); } @@ -194,7 +201,7 @@ public void finish() { if (DebugFlags.DUMP_APP_ICON_ATLAS) { try { - DebugUtils.dump(DumpType.ATLAS, Laptop.ICON_TEXTURES, (stream) -> ImageIO.write(atlas, "png", stream)); + DebugUtils.dump(DumpType.ATLAS, MineOS.ICON_TEXTURES, (stream) -> ImageIO.write(atlas, "png", stream)); } catch (Exception e) { throw new RuntimeException(e); } @@ -207,7 +214,7 @@ public void finish() { ByteArrayInputStream input = new ByteArrayInputStream(bytes); Minecraft.getInstance().submit(() -> { try { - Minecraft.getInstance().getTextureManager().register(Laptop.ICON_TEXTURES, new DynamicTexture(NativeImage.read(input))); + Minecraft.getInstance().getTextureManager().register(MineOS.ICON_TEXTURES, new DynamicTexture(NativeImage.read(input))); } catch (IOException e) { throw new RuntimeException(e); } @@ -237,13 +244,6 @@ public void finish() { imageWriter.finish(); } -// @ExpectPlatform -// private static void.json updateIcon(AppInfo info, int iconU, int iconV) { -// throw new AssertionError(); -//// ObfuscationReflectionHelper.setPrivateValue(AppInfo.class, info, iconU, "iconU"); -//// ObfuscationReflectionHelper.setPrivateValue(AppInfo.class, info, iconV, "iconV"); -// } - public static void setRenderLayer(Block block, RenderType type) { RenderRegistry.register(block, type ); @@ -261,6 +261,6 @@ public static void registerRenderers() { public static void registerLayerDefinitions() { LOGGER.info("Registering layer definitions."); -// EntityModelLayerRegistry.register(PrinterRenderer.PaperModel.LAYER_LOCATION, PrinterRenderer.PaperModel::createBodyLayer); + EntityModelLayerRegistry.register(PrinterRenderer.PaperModel.LAYER_LOCATION, PrinterRenderer.PaperModel::createBodyLayer); } } diff --git a/common/src/main/java/com/ultreon/devices/DeviceConfig.java b/common/src/main/java/dev/ultreon/devices/DeviceConfig.java similarity index 78% rename from common/src/main/java/com/ultreon/devices/DeviceConfig.java rename to common/src/main/java/dev/ultreon/devices/DeviceConfig.java index cb9e04c77..024b82700 100644 --- a/common/src/main/java/com/ultreon/devices/DeviceConfig.java +++ b/common/src/main/java/dev/ultreon/devices/DeviceConfig.java @@ -1,36 +1,35 @@ -package com.ultreon.devices; +package dev.ultreon.devices; -import dev.architectury.injectables.annotations.ExpectPlatform; import dev.architectury.platform.Platform; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; public class DeviceConfig { private static final String CATEGORY_LAPTOP = "laptopSettings"; - public static final ForgeConfigSpec.IntValue PING_RATE; + public static final ModConfigSpec.IntValue PING_RATE; private static final String CATEGORY_ROUTER = "routerSettings"; - public static final ForgeConfigSpec.IntValue SIGNAL_RANGE; - public static final ForgeConfigSpec.IntValue BEACON_INTERVAL; - public static final ForgeConfigSpec.IntValue MAX_DEVICES; + public static final ModConfigSpec.IntValue SIGNAL_RANGE; + public static final ModConfigSpec.IntValue BEACON_INTERVAL; + public static final ModConfigSpec.IntValue MAX_DEVICES; private static final String CATEGORY_PRINTING = "printerSettings"; - public static final ForgeConfigSpec.BooleanValue OVERRIDE_PRINT_SPEED; - public static final ForgeConfigSpec.IntValue CUSTOM_PRINT_SPEED; - public static final ForgeConfigSpec.IntValue MAX_PAPER_COUNT; + public static final ModConfigSpec.BooleanValue OVERRIDE_PRINT_SPEED; + public static final ModConfigSpec.IntValue CUSTOM_PRINT_SPEED; + public static final ModConfigSpec.IntValue MAX_PAPER_COUNT; private static final String CATEGORY_PIXEL_PAINTER = "pixelPainter"; - public static final ForgeConfigSpec.BooleanValue PIXEL_PAINTER_ENABLE; - public static final ForgeConfigSpec.BooleanValue RENDER_PRINTED_3D; + public static final ModConfigSpec.BooleanValue PIXEL_PAINTER_ENABLE; + public static final ModConfigSpec.BooleanValue RENDER_PRINTED_3D; public static final String CATEGORY_DEBUG = "debug"; - public static final ForgeConfigSpec.BooleanValue DEBUG_BUTTON; + public static final ModConfigSpec.BooleanValue DEBUG_BUTTON; - public static final ForgeConfigSpec CONFIG; + public static final ModConfigSpec CONFIG; static { - ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + ModConfigSpec.Builder builder = new ModConfigSpec.Builder(); PING_RATE = builder.comment("The amount of ticks the laptop waits until sending another ping to it's connected router.") .defineInRange(CATEGORY_LAPTOP + ".pingRate", 20, 1, 200); @@ -53,7 +52,7 @@ public class DeviceConfig { RENDER_PRINTED_3D = builder.comment("Should the pixels on printed pictures be render in 3D? Warning, this will decrease the performance of the game. You shouldn't enable it if you have a slow computer.") .define(CATEGORY_PIXEL_PAINTER + ".renderPrintedIn3d", false); - DEBUG_BUTTON = builder.comment("Display a button to access a worldless laptop") + DEBUG_BUTTON = builder.comment("GuiGraphics a button to access a worldless laptop") .define(CATEGORY_DEBUG + ".debugButton", Platform.isDevelopmentEnvironment()); CONFIG = builder.build(); diff --git a/common/src/main/java/com/ultreon/devices/DeviceTab.java b/common/src/main/java/dev/ultreon/devices/DeviceTab.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/DeviceTab.java rename to common/src/main/java/dev/ultreon/devices/DeviceTab.java index c9f9d1274..d1d9fdce3 100644 --- a/common/src/main/java/com/ultreon/devices/DeviceTab.java +++ b/common/src/main/java/dev/ultreon/devices/DeviceTab.java @@ -1,22 +1,18 @@ -package com.ultreon.devices; +package dev.ultreon.devices; -import com.ultreon.devices.init.DeviceBlocks; -import com.ultreon.devices.init.DeviceItems; import dev.architectury.registry.CreativeTabRegistry; import dev.architectury.registry.registries.DeferredSupplier; import dev.architectury.registry.registries.RegistrySupplier; -import net.minecraft.network.chat.Component; +import dev.ultreon.devices.init.DeviceItems; import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import static com.ultreon.devices.Devices.id; +import static dev.ultreon.devices.UltreonDevicesMod.id; public class DeviceTab { @SuppressWarnings("UnstableApiUsage") public static DeferredSupplier create() { - Devices.LOGGER.info("Creating Creative Tab..."); + UltreonDevicesMod.LOGGER.info("Creating Creative Tab..."); DeferredSupplier devicesTabDevice = CreativeTabRegistry.defer(id("devices_tab_device")); //TODO () -> new ItemStack(DeviceBlocks.LAPTOPS.of(DyeColor.RED).get() CreativeTabRegistry.modify(devicesTabDevice, (flags, output, canUseGameMasterBlocks) -> { for (RegistrySupplier laptop : DeviceItems.LAPTOPS) { diff --git a/common/src/main/java/com/ultreon/devices/DevicesEarlyConfig.java b/common/src/main/java/dev/ultreon/devices/DevicesEarlyConfig.java similarity index 78% rename from common/src/main/java/com/ultreon/devices/DevicesEarlyConfig.java rename to common/src/main/java/dev/ultreon/devices/DevicesEarlyConfig.java index f22c0860b..5b3974f27 100644 --- a/common/src/main/java/com/ultreon/devices/DevicesEarlyConfig.java +++ b/common/src/main/java/dev/ultreon/devices/DevicesEarlyConfig.java @@ -1,4 +1,4 @@ -package com.ultreon.devices; +package dev.ultreon.devices; import dev.architectury.platform.Platform; @@ -22,13 +22,13 @@ public class DevicesEarlyConfig { */ public static DevicesEarlyConfig load() { try (FileReader reader = new FileReader(FILE)) { - return Devices.GSON.fromJson(reader, DevicesEarlyConfig.class); + return UltreonDevicesMod.GSON.fromJson(reader, DevicesEarlyConfig.class); } catch (FileNotFoundException e) { DevicesEarlyConfig devicesEarlyConfig = new DevicesEarlyConfig(); devicesEarlyConfig.save(); return devicesEarlyConfig; } catch (IOException e) { - Devices.LOGGER.error("Failed to load devices early config", e); + UltreonDevicesMod.LOGGER.error("Failed to load devices early config", e); return new DevicesEarlyConfig(); } } @@ -38,9 +38,9 @@ public static DevicesEarlyConfig load() { */ public void save() { try (FileWriter writer = new FileWriter(FILE)) { - Devices.GSON.toJson(this, writer); + UltreonDevicesMod.GSON.toJson(this, writer); } catch (IOException e) { - Devices.LOGGER.error("Failed to save devices early config", e); + UltreonDevicesMod.LOGGER.error("Failed to save devices early config", e); } } } diff --git a/common/src/main/java/com/ultreon/devices/IDeviceType.java b/common/src/main/java/dev/ultreon/devices/IDeviceType.java similarity index 70% rename from common/src/main/java/com/ultreon/devices/IDeviceType.java rename to common/src/main/java/dev/ultreon/devices/IDeviceType.java index 3d47afac4..2672c137a 100644 --- a/common/src/main/java/com/ultreon/devices/IDeviceType.java +++ b/common/src/main/java/dev/ultreon/devices/IDeviceType.java @@ -1,4 +1,4 @@ -package com.ultreon.devices; +package dev.ultreon.devices; public interface IDeviceType { ModDeviceTypes getDeviceType(); diff --git a/common/src/main/java/com/ultreon/devices/LaunchException.java b/common/src/main/java/dev/ultreon/devices/LaunchException.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/LaunchException.java rename to common/src/main/java/dev/ultreon/devices/LaunchException.java index b60849e9e..46e460b0a 100644 --- a/common/src/main/java/com/ultreon/devices/LaunchException.java +++ b/common/src/main/java/dev/ultreon/devices/LaunchException.java @@ -1,7 +1,6 @@ -package com.ultreon.devices; +package dev.ultreon.devices; import dev.architectury.injectables.targets.ArchitecturyTarget; -import dev.architectury.platform.Platform; public class LaunchException extends RuntimeException { @Override diff --git a/common/src/main/java/com/ultreon/devices/ModDeviceTypes.java b/common/src/main/java/dev/ultreon/devices/ModDeviceTypes.java similarity index 52% rename from common/src/main/java/com/ultreon/devices/ModDeviceTypes.java rename to common/src/main/java/dev/ultreon/devices/ModDeviceTypes.java index b850151f7..0097170a2 100644 --- a/common/src/main/java/com/ultreon/devices/ModDeviceTypes.java +++ b/common/src/main/java/dev/ultreon/devices/ModDeviceTypes.java @@ -1,10 +1,16 @@ -package com.ultreon.devices; +package dev.ultreon.devices; +import com.mojang.serialization.Codec; import org.jetbrains.annotations.Contract; public enum ModDeviceTypes implements IDeviceType { COMPUTER, PRINTER, FLASH_DRIVE, ROUTER, SEAT; + public static final Codec CODEC = Codec.STRING.xmap( + val -> ModDeviceTypes.valueOf(val.toUpperCase()), + val -> val.name().toLowerCase() + ); + @Override @Contract(pure = true, value = "-> this") public ModDeviceTypes getDeviceType() { diff --git a/common/src/main/java/dev/ultreon/devices/OperatingSystems.java b/common/src/main/java/dev/ultreon/devices/OperatingSystems.java new file mode 100644 index 000000000..5327dc662 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/OperatingSystems.java @@ -0,0 +1,20 @@ +package dev.ultreon.devices; + +import dev.architectury.registry.registries.RegistrySupplier; +import dev.ultreon.devices.api.os.OperatingSystem; +import dev.ultreon.devices.core.BootLoader; +import dev.ultreon.devices.mineos.client.MineOS; + +import java.util.function.Supplier; + +public class OperatingSystems { + public static final RegistrySupplier> MINE_OS = register("mine_os", () -> MineOS::new); + + private static RegistrySupplier> register(String name, Supplier> supplier) { + return UltreonDevicesMod.OPERATING_SYSTEM.register(UltreonDevicesMod.res(name), supplier); + } + + public static void init() { + + } +} diff --git a/common/src/main/java/com/ultreon/devices/Reference.java b/common/src/main/java/dev/ultreon/devices/Reference.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/Reference.java rename to common/src/main/java/dev/ultreon/devices/Reference.java index eafde8bce..538c065a9 100644 --- a/common/src/main/java/com/ultreon/devices/Reference.java +++ b/common/src/main/java/dev/ultreon/devices/Reference.java @@ -1,6 +1,5 @@ -package com.ultreon.devices; +package dev.ultreon.devices; -import dev.architectury.injectables.annotations.ExpectPlatform; import dev.architectury.platform.Platform; public class Reference { @@ -12,7 +11,7 @@ public class Reference { } public static String getVersion() { - return Platform.getMod(Devices.MOD_ID).getVersion(); + return Platform.getMod(UltreonDevicesMod.MOD_ID).getVersion(); } public static String[] getVerInfo() { diff --git a/common/src/main/java/com/ultreon/devices/Resources.java b/common/src/main/java/dev/ultreon/devices/Resources.java similarity index 55% rename from common/src/main/java/com/ultreon/devices/Resources.java rename to common/src/main/java/dev/ultreon/devices/Resources.java index 8c10643fa..e986aea5b 100644 --- a/common/src/main/java/com/ultreon/devices/Resources.java +++ b/common/src/main/java/dev/ultreon/devices/Resources.java @@ -1,4 +1,4 @@ -package com.ultreon.devices; +package dev.ultreon.devices; import net.minecraft.resources.ResourceLocation; @@ -8,6 +8,6 @@ private Resources() { } - public static final ResourceLocation ENDER_MAIL_ICONS = Devices.id("textures/gui/ender_mail.png"); - public static final ResourceLocation ENDER_MAIL_BACKGROUND = Devices.id("textures/gui/ender_mail_background.png"); + public static final ResourceLocation ENDER_MAIL_ICONS = UltreonDevicesMod.id("textures/gui/ender_mail.png"); + public static final ResourceLocation ENDER_MAIL_BACKGROUND = UltreonDevicesMod.id("textures/gui/ender_mail_background.png"); } diff --git a/common/src/main/java/com/ultreon/devices/TestManager.java b/common/src/main/java/dev/ultreon/devices/TestManager.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/TestManager.java rename to common/src/main/java/dev/ultreon/devices/TestManager.java index 1b4eda59d..14a6c00f5 100644 --- a/common/src/main/java/com/ultreon/devices/TestManager.java +++ b/common/src/main/java/dev/ultreon/devices/TestManager.java @@ -1,4 +1,4 @@ -package com.ultreon.devices; +package dev.ultreon.devices; import java.util.HashSet; import java.util.Set; diff --git a/common/src/main/java/com/ultreon/devices/Devices.java b/common/src/main/java/dev/ultreon/devices/UltreonDevicesMod.java similarity index 66% rename from common/src/main/java/com/ultreon/devices/Devices.java rename to common/src/main/java/dev/ultreon/devices/UltreonDevicesMod.java index 5ad0465e5..875d45fe1 100644 --- a/common/src/main/java/com/ultreon/devices/Devices.java +++ b/common/src/main/java/dev/ultreon/devices/UltreonDevicesMod.java @@ -1,55 +1,55 @@ -package com.ultreon.devices; +package dev.ultreon.devices; import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; import com.google.gson.*; import com.mojang.serialization.Lifecycle; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.api.print.PrintingManager; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.OnlineRequest; -import com.ultreon.devices.block.PrinterBlock; -import com.ultreon.devices.core.client.ClientNotification; -import com.ultreon.devices.core.client.debug.ClientAppDebug; -import com.ultreon.devices.core.io.task.*; -import com.ultreon.devices.core.network.task.TaskConnect; -import com.ultreon.devices.core.network.task.TaskGetDevices; -import com.ultreon.devices.core.network.task.TaskPing; -import com.ultreon.devices.core.print.task.TaskPrint; -import com.ultreon.devices.core.task.TaskInstallApp; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.network.PacketHandler; -import com.ultreon.devices.network.task.SyncApplicationPacket; -import com.ultreon.devices.network.task.SyncConfigPacket; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.object.TrayItem; -import com.ultreon.devices.programs.IconsApp; -import com.ultreon.devices.programs.PixelPainterApp; -import com.ultreon.devices.programs.TestApp; -import com.ultreon.devices.programs.auction.task.TaskAddAuction; -import com.ultreon.devices.programs.auction.task.TaskBuyItem; -import com.ultreon.devices.programs.auction.task.TaskGetAuctions; -import com.ultreon.devices.programs.debug.TextAreaApp; -import com.ultreon.devices.programs.email.task.*; -import com.ultreon.devices.programs.example.ExampleApp; -import com.ultreon.devices.programs.example.task.TaskNotificationTest; -import com.ultreon.devices.programs.system.SystemApp; -import com.ultreon.devices.programs.system.task.*; -import com.ultreon.devices.util.SiteRegistration; -import com.ultreon.devices.util.Vulnerability; -import dev.architectury.event.EventResult; import dev.architectury.event.events.client.ClientPlayerEvent; -import dev.architectury.event.events.common.InteractionEvent; import dev.architectury.event.events.common.LifecycleEvent; import dev.architectury.event.events.common.PlayerEvent; import dev.architectury.injectables.targets.ArchitecturyTarget; import dev.architectury.platform.Platform; import dev.architectury.registry.registries.DeferredSupplier; +import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrarManager; import dev.architectury.utils.Env; import dev.architectury.utils.EnvExecutor; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.ApplicationSupplier; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.print.PrintingManager; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.util.Vulnerability; +import dev.ultreon.devices.api.utils.OnlineRequest; +import dev.ultreon.devices.core.BootLoader; +import dev.ultreon.devices.core.client.ClientNotification; +import dev.ultreon.devices.core.io.task.*; +import dev.ultreon.devices.core.network.task.TaskConnect; +import dev.ultreon.devices.core.network.task.TaskGetDevices; +import dev.ultreon.devices.core.network.task.TaskPing; +import dev.ultreon.devices.core.print.task.TaskPrint; +import dev.ultreon.devices.core.task.TaskInstallApp; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.IconsApp; +import dev.ultreon.devices.mineos.apps.PixelPainterApp; +import dev.ultreon.devices.mineos.apps.TestApp; +import dev.ultreon.devices.mineos.apps.auction.task.TaskAddAuction; +import dev.ultreon.devices.mineos.apps.auction.task.TaskBuyItem; +import dev.ultreon.devices.mineos.apps.auction.task.TaskGetAuctions; +import dev.ultreon.devices.mineos.apps.debug.TextAreaApp; +import dev.ultreon.devices.mineos.apps.email.task.*; +import dev.ultreon.devices.mineos.apps.example.ExampleApp; +import dev.ultreon.devices.mineos.apps.example.task.TaskNotificationTest; +import dev.ultreon.devices.mineos.apps.system.SystemApp; +import dev.ultreon.devices.mineos.apps.system.task.*; +import dev.ultreon.devices.network.PacketHandler; +import dev.ultreon.devices.network.task.SyncApplicationPacket; +import dev.ultreon.devices.network.task.SyncConfigPacket; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.TrayItem; +import dev.ultreon.devices.util.SiteRegistration; +import dev.ultreon.devices.util.VulnerabilityUtil; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.MappedRegistry; @@ -59,9 +59,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.level.Level; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -76,7 +74,7 @@ import java.util.function.Supplier; import java.util.regex.Pattern; -public abstract class Devices { +public abstract class UltreonDevicesMod { public static final boolean DEVELOPER_MODE = Platform.isDevelopmentEnvironment(); public static final String MOD_ID = "devices"; public static final Logger LOGGER = LoggerFactory.getLogger("Devices Mod"); @@ -86,11 +84,14 @@ public abstract class Devices { public static final List SITE_REGISTRATIONS = new ProtectedArrayList<>(); public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); public static final DevicesEarlyConfig EARLY_CONFIG = DevicesEarlyConfig.load(); + public static final Registrar> OPERATING_SYSTEM = REGISTRIES.get().>builder(res("operating_system")).syncToClients().build(); + private static final Pattern DEV_PREVIEW_PATTERN = Pattern.compile("\\d+\\.\\d+\\.\\d+-dev\\d+"); private static final boolean IS_DEV_PREVIEW = DEV_PREVIEW_PATTERN.matcher(Reference.VERSION).matches(); - private static final String GITWEB_REGISTER_URL = "https://ultreon.gitlab.io/gitweb/site_register.json"; + + public static final String GITWEB_REGISTER_URL = "https://ultreon.gitlab.io/gitweb/site_register.json"; public static final String VULNERABILITIES_URL = "https://jab125.com/gitweb/vulnerabilities.php"; - // private static final Logger ULTRAN_LANG_LOGGER = LoggerFactory.getLogger("UltranLang"); + @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") private static final SiteRegisterStack SITE_REGISTER_STACK = new SiteRegisterStack(); @@ -100,7 +101,7 @@ public abstract class Devices { static List allowedApps = new ArrayList<>(); private static List vulnerabilities = new ArrayList<>(); - private static Devices instance; + private static UltreonDevicesMod instance; public static List getVulnerabilities() { return vulnerabilities; @@ -108,11 +109,11 @@ public static List getVulnerabilities() { private static MinecraftServer server; private static TestManager tests; - protected Devices() { - Devices.instance = this; + protected UltreonDevicesMod() { + UltreonDevicesMod.instance = this; } - public static Devices getInstance() { + public static UltreonDevicesMod get() { return instance; } @@ -121,7 +122,6 @@ public void init() { preInit(); serverSetup(); } - // BlockEntityUtil.sendUpdate(null, null, null); // STOPSHIP: 3/11/2022 should be moved to dedicated testmod final var property = System.getProperty("ultreon.devices.tests"); @@ -131,23 +131,23 @@ public void init() { tests.load(Set.of(split)); } - //LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName()); LOGGER.info("Doing some common setup."); PacketHandler.init(); registerApplications(); + OperatingSystems.init(); + EnvExecutor.runInEnv(Env.CLIENT, () -> () -> { - ClientAppDebug.register(); - ClientModEvents.clientSetup(); //todo - Devices.setupSiteRegistrations(); - Devices.checkForVulnerabilities(); + ClientModEvents.clientSetup(); + UltreonDevicesMod.setupSiteRegistrations(); + UltreonDevicesMod.checkForVulnerabilities(); }); setupEvents(); - EnvExecutor.runInEnv(Env.CLIENT, () -> Devices::setupClientEvents); //todo + EnvExecutor.runInEnv(Env.CLIENT, () -> UltreonDevicesMod::setupClientEvents); if (!ArchitecturyTarget.getCurrentTarget().equals("forge")) { loadComplete(); } @@ -195,6 +195,14 @@ private void registerApplications() { TaskManager.registerTask(TaskPing::new); TaskManager.registerTask(TaskGetDevices::new); + // Bank + TaskManager.registerTask(TaskDeposit::new); + TaskManager.registerTask(TaskWithdraw::new); + TaskManager.registerTask(TaskGetBalance::new); + TaskManager.registerTask(TaskPay::new); + TaskManager.registerTask(TaskAdd::new); + TaskManager.registerTask(TaskRemove::new); + // File browser TaskManager.registerTask(TaskSendAction::new); TaskManager.registerTask(TaskSetupFileBrowser::new); @@ -213,7 +221,7 @@ private void registerApplications() { TaskManager.registerTask(TaskDeleteEmail::new); TaskManager.registerTask(TaskViewEmail::new); - if (Platform.isDevelopmentEnvironment() || Devices.EARLY_CONFIG.enableBetaApps) { + if (Platform.isDevelopmentEnvironment() || UltreonDevicesMod.EARLY_CONFIG.enableBetaApps) { // Auction TaskManager.registerTask(TaskAddAuction::new); TaskManager.registerTask(TaskGetAuctions::new); @@ -228,7 +236,7 @@ private void registerApplications() { TaskManager.registerTask(TaskRemove::new); } - if (Platform.isDevelopmentEnvironment() || Devices.EARLY_CONFIG.enableDebugApps) { + if (Platform.isDevelopmentEnvironment() || UltreonDevicesMod.EARLY_CONFIG.enableDebugApps) { // Applications (Developers) ApplicationManager.registerApplication(new ResourceLocation(Reference.MOD_ID, "example"), () -> ExampleApp::new, false); ApplicationManager.registerApplication(new ResourceLocation(Reference.MOD_ID, "icons"), () -> IconsApp::new, false); @@ -249,25 +257,13 @@ private void registerApplications() { protected abstract List getApplications(); public static void setAllowedApps(List allowedApps) { - Devices.allowedApps = allowedApps; + UltreonDevicesMod.allowedApps = allowedApps; } public static String getModVersion() { return Platform.getMod(MOD_ID).getVersion(); } - public interface ApplicationSupplier { - - /** - * Gets a result. - * - * @return a result - */ - Supplier get(); - - boolean isSystem(); - } - /** * DO NOT CALL: FOR INTERNAL USE ONLY */ @@ -291,7 +287,7 @@ public Application registerApplication(ResourceLocation identifier, ApplicationS AtomicReference application = new AtomicReference<>(null); EnvExecutor.runInEnv(Env.CLIENT, () -> () -> { Application appl = app.get().get(); - List apps = getApplications(); /*ObfuscationReflectionHelper.getPrivateValue(Laptop.class, null, "APPLICATIONS");*/ + List apps = getApplications(); assert apps != null; apps.add(appl); @@ -305,7 +301,7 @@ public Application registerApplication(ResourceLocation identifier, ApplicationS @NotNull @Environment(EnvType.CLIENT) private static AppInfo generateAppInfo(ResourceLocation identifier, Class clazz) { - LOGGER.debug("Generating app info for " + identifier.toString()); + DebugLog.log("Generating app info for {}" + identifier.toString()); AppInfo info = new AppInfo(identifier, SystemApp.class.isAssignableFrom(clazz)); info.reload(); @@ -320,7 +316,7 @@ private static AppInfo generateAppInfo(ResourceLocation identifier, Class classPrint) { - LOGGER.debug("Registering print: " + identifier.toString()); + DebugLog.log("Registering print: %s", identifier.toString()); try { Constructor constructor = classPrint.getConstructor(); @@ -328,20 +324,19 @@ public boolean registerPrint(ResourceLocation identifier, Class classRenderer = print.getRenderer(); try { IPrint.Renderer renderer = classRenderer.getConstructor().newInstance(); - Map idToRenderer = getRegisteredRenders(); //ObfuscationReflectionHelper.getPrivateValue(PrintingManager.class, null, "registeredRenders"); + Map idToRenderer = getRegisteredRenders(); if (idToRenderer == null) { idToRenderer = new HashMap<>(); setRegisteredRenders(idToRenderer); - //ObfuscationReflectionHelper.setPrivateValue(PrintingManager.class, null, idToRenderer, "registeredRenders"); } idToRenderer.put(identifier.toString(), renderer); } catch (InstantiationException e) { - Devices.LOGGER.error("The print renderer '" + classRenderer.getName() + "' is missing an empty constructor and could not be registered!"); + UltreonDevicesMod.LOGGER.error("The print renderer '{}' is missing an empty constructor and could not be registered!", classRenderer.getName()); return false; } return true; } catch (Exception e) { - Devices.LOGGER.error("The print '" + classPrint.getName() + "' is missing an empty constructor and could not be registered!"); + UltreonDevicesMod.LOGGER.error("The print '{}' is missing an empty constructor and could not be registered!", classPrint.getName()); } return false; } @@ -367,12 +362,12 @@ public static List getAllowedApplications() { } public static ResourceLocation res(String path) { - return new ResourceLocation(Devices.MOD_ID, path); + return new ResourceLocation(UltreonDevicesMod.MOD_ID, path); } private static void setupClientEvents() { ClientPlayerEvent.CLIENT_PLAYER_QUIT.register((player -> { - LOGGER.debug("Client disconnected from server"); + DebugLog.log("Client disconnected from server"); allowedApps = null; DeviceConfig.restore(); @@ -382,19 +377,9 @@ private static void setupClientEvents() { private static void setupEvents() { LifecycleEvent.SERVER_STARTING.register((instance -> server = instance)); LifecycleEvent.SERVER_STOPPED.register(instance -> server = null); - InteractionEvent.RIGHT_CLICK_BLOCK.register(((player, hand, pos, face) -> { - Level level = player.level(); - if (!player.getItemInHand(hand).isEmpty() && player.getItemInHand(hand).getItem() == Items.PAPER) { - if (level.getBlockState(pos).getBlock() instanceof PrinterBlock) { - return EventResult.interruptTrue(); - //event.setUseBlock(Event.Result.ALLOW); //todo - } - } - return EventResult.pass(); - })); PlayerEvent.PLAYER_JOIN.register((player -> { - LOGGER.info("Player logged in: " + player.getName()); + LOGGER.info("Player logged in: {}", player.getName()); if (allowedApps != null) { PacketHandler.sendToClient(new SyncApplicationPacket(allowedApps), player); @@ -416,7 +401,7 @@ private static void checkForVulnerabilities() { } JsonArray array = JsonParser.parseString(response).getAsJsonArray(); - vulnerabilities = Vulnerability.parseArray(array); + vulnerabilities = VulnerabilityUtil.parseArray(array); vulnerabilities.forEach(vul -> { String s = vul.toPrettyString(); s.lines().toList().forEach(line -> LOGGER.debug("[VulChecker] {}", line)); @@ -436,77 +421,96 @@ enum Type { OnlineRequest.getInstance().make(url, (success, response) -> CompletableFuture.runAsync(() -> { if (success) { - //Minecraft.getInstance().doRunTask(() -> { JsonElement root = JsonParser.parseString(response); DebugLog.log("root = " + root); JsonArray rootArray = root.getAsJsonArray(); for (JsonElement rootRegister : rootArray) { DebugLog.log("rootRegister = " + rootRegister); JsonObject elem = rootRegister.getAsJsonObject(); - var registrant = elem.get("registrant") != null ? elem.get("registrant").getAsString() : null; - var type = Type.REGISTRATION; - JsonElement typeElem; - if ((typeElem = elem.get("type")) != null && typeElem.isJsonPrimitive() && typeElem.getAsJsonPrimitive().isString()) { - switch (typeElem.getAsString()) { - case "registration" -> { - } - case "site-register" -> type = Type.SITE_REGISTER; - default -> { - LOGGER.error("Invalid element type: " + typeElem.getAsString()); - continue; - } - } - } - - switch (type) { - case REGISTRATION -> { - @SuppressWarnings("all") //no - var dev = elem.get("dev") != null ? elem.get("dev").getAsBoolean() : false; - var site = elem.get("site").getAsString(); - if (dev && !IS_DEV_PREVIEW) { - continue; - } - for (JsonElement registration : elem.get("registrations").getAsJsonArray()) { - var a = registration.getAsJsonObject().keySet(); - var d = registration.getAsJsonObject(); - for (String string : a) { - var registrationType = d.get(string).getAsString(); - SITE_REGISTRATIONS.add(new SiteRegistration(registrant, string, registrationType, site)); - } - } - } - case SITE_REGISTER -> { - if (!elem.has("register") || !elem.get("register").isJsonPrimitive() || !elem.get("register").getAsJsonPrimitive().isString()) { - continue; - } - var registerUrl = elem.get("register").getAsString(); - try { - var registerFuture = setupSiteRegistration(registerUrl); - registerFuture.join(); - } catch (Exception e) { - LOGGER.error("Error when loading site register: " + registerUrl); - } - } - } + parseRegister(elem, future); } } else { LOGGER.error("Error occurred when loading site registrations at: " + url); - future.complete(null); return; } - future.complete(null); SITE_REGISTER_STACK.pop(); })); return future; } - public static ResourceLocation id(String id) { - return new ResourceLocation(MOD_ID, id); + private static void parseRegister(JsonObject elem, CompletableFuture future) { + var registrant = elem.get("registrant") != null ? elem.get("registrant").getAsString() : null; + RegisterType type; + JsonElement typeElem; + if ((typeElem = elem.get("type")) != null && typeElem.isJsonPrimitive() && typeElem.getAsJsonPrimitive().isString()) { + String asString = typeElem.getAsString(); + if (asString.equals("registration")) { + type = RegisterType.REGISTRATION; + } else if (asString.equals("site-register")) { + type = RegisterType.SITE_REGISTER; + } else { + LOGGER.error("Invalid element type: {}", typeElem.getAsString()); + future.complete(null); + return; + } + } else { + type = RegisterType.REGISTRATION; + } + + if (type == RegisterType.REGISTRATION) { + addRegistration(elem, registrant); + } else { + addSiteRegister(elem); + } + future.complete(null); + } + + private enum RegisterType { + SITE_REGISTER, REGISTRATION + } + + private static void addSiteRegister(JsonObject elem) { + if (!elem.has("register") || !elem.get("register").isJsonPrimitive() || !elem.get("register").getAsJsonPrimitive().isString()) { + return; + } + var registerUrl = elem.get("register").getAsString(); + try { + var registerFuture = setupSiteRegistration(registerUrl); + registerFuture.join(); + } catch (Exception e) { + LOGGER.error("Error when loading site register: {}", registerUrl); + } + } + + private static void addRegistration(JsonObject elem, String registrant) { + @SuppressWarnings("all") //no + var dev = elem.get("dev") != null ? elem.get("dev").getAsBoolean() : false; + var site = elem.get("site").getAsString(); + if (dev && !IS_DEV_PREVIEW) { + return; + } + for (JsonElement registration : elem.get("registrations").getAsJsonArray()) { + var a = registration.getAsJsonObject().keySet(); + var d = registration.getAsJsonObject(); + for (String string : a) { + var registrationType = d.get(string).getAsString(); + SITE_REGISTRATIONS.add(new SiteRegistration(registrant, string, registrationType, site)); + } + } + } + + @ApiStatus.Obsolete // Jab125 wanted this... + public static ResourceLocation id(String path) { + return res(path); + } + + public boolean isDebug() { + return Platform.isDevelopmentEnvironment(); } private static class ProtectedArrayList extends ArrayList { - private final StackWalker stackWalker = StackWalker.getInstance(EnumSet.of(StackWalker.Option.RETAIN_CLASS_REFERENCE)); + private final transient StackWalker stackWalker = StackWalker.getInstance(EnumSet.of(StackWalker.Option.RETAIN_CLASS_REFERENCE)); private boolean frozen = false; private void freeze() { @@ -520,7 +524,7 @@ private void freezeCheck() { @Override public boolean add(T t) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } return super.add(t); @@ -529,7 +533,7 @@ public boolean add(T t) { @Override public boolean addAll(Collection c) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } return super.addAll(c); @@ -538,7 +542,7 @@ public boolean addAll(Collection c) { @Override public void add(int index, T element) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } super.add(index, element); @@ -547,7 +551,7 @@ public void add(int index, T element) { @Override protected void removeRange(int fromIndex, int toIndex) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } super.removeRange(fromIndex, toIndex); @@ -556,7 +560,7 @@ protected void removeRange(int fromIndex, int toIndex) { @Override public boolean remove(Object o) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } return super.remove(o); @@ -565,7 +569,7 @@ public boolean remove(Object o) { @Override public boolean removeAll(Collection c) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } return super.removeAll(c); @@ -574,7 +578,7 @@ public boolean removeAll(Collection c) { @Override public boolean removeIf(Predicate filter) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } return super.removeIf(filter); @@ -583,7 +587,7 @@ public boolean removeIf(Predicate filter) { @Override public T remove(int index) { freezeCheck(); - if (stackWalker.getCallerClass() != Devices.class) { + if (stackWalker.getCallerClass() != UltreonDevicesMod.class) { throw new IllegalCallerException("Should be called from Devices Mod main class."); } return super.remove(index); diff --git a/common/src/main/java/com/ultreon/devices/annotations/PlatformOverride.java b/common/src/main/java/dev/ultreon/devices/annotations/PlatformOverride.java similarity index 59% rename from common/src/main/java/com/ultreon/devices/annotations/PlatformOverride.java rename to common/src/main/java/dev/ultreon/devices/annotations/PlatformOverride.java index 1266526e8..fa3a3c605 100644 --- a/common/src/main/java/com/ultreon/devices/annotations/PlatformOverride.java +++ b/common/src/main/java/dev/ultreon/devices/annotations/PlatformOverride.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.annotations; +package dev.ultreon.devices.annotations; public @interface PlatformOverride { String value(); diff --git a/common/src/main/java/com/ultreon/devices/api/ApplicationManager.java b/common/src/main/java/dev/ultreon/devices/api/ApplicationManager.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/api/ApplicationManager.java rename to common/src/main/java/dev/ultreon/devices/api/ApplicationManager.java index 971f7056a..c0d6792c8 100644 --- a/common/src/main/java/com/ultreon/devices/api/ApplicationManager.java +++ b/common/src/main/java/dev/ultreon/devices/api/ApplicationManager.java @@ -1,13 +1,13 @@ -package com.ultreon.devices.api; +package dev.ultreon.devices.api; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; import org.slf4j.Marker; import org.slf4j.MarkerFactory; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -36,9 +36,9 @@ private ApplicationManager() { */ @Nullable public static Application registerApplication(ResourceLocation identifier, Supplier> app, boolean isSystem) { - Devices.LOGGER.debug(MARKER, "Registering application {}", identifier); + UltreonDevicesMod.LOGGER.debug(MARKER, "Registering application {}", identifier); @SuppressWarnings("deprecation") - Application application = Devices.getInstance().registerApplication(identifier, new Devices.ApplicationSupplier() { + Application application = UltreonDevicesMod.get().registerApplication(identifier, new ApplicationSupplier() { @Override public Supplier get() { return app.get(); @@ -64,7 +64,7 @@ public boolean isSystem() { * @return the application list */ public static List getAvailableApplications() { - final Predicate FILTER = info -> !info.isSystemApp() && (!Devices.hasAllowedApplications() || Devices.getAllowedApplications().contains(info)); + final Predicate FILTER = info -> !info.isSystemApp() && (!UltreonDevicesMod.hasAllowedApplications() || UltreonDevicesMod.getAllowedApplications().contains(info)); return APP_INFO.values().stream().filter(FILTER).collect(Collectors.toList()); } diff --git a/common/src/main/java/dev/ultreon/devices/api/ApplicationSupplier.java b/common/src/main/java/dev/ultreon/devices/api/ApplicationSupplier.java new file mode 100644 index 000000000..786f5295b --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/ApplicationSupplier.java @@ -0,0 +1,17 @@ +package dev.ultreon.devices.api; + +import dev.ultreon.devices.api.app.Application; + +import java.util.function.Supplier; + +public interface ApplicationSupplier { + + /** + * Gets a result. + * + * @return a result + */ + Supplier get(); + + boolean isSystem(); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/DebugLog.java b/common/src/main/java/dev/ultreon/devices/api/DebugLog.java new file mode 100644 index 000000000..ccc4c8c3b --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/DebugLog.java @@ -0,0 +1,11 @@ +package dev.ultreon.devices.api; + +import dev.ultreon.devices.UltreonDevicesMod; + +public class DebugLog { + public static void log(String message) { + if (UltreonDevicesMod.get().isDebug()) { + UltreonDevicesMod.LOGGER.debug(message); + } + } +} diff --git a/common/src/main/java/dev/ultreon/devices/api/Logger.java b/common/src/main/java/dev/ultreon/devices/api/Logger.java new file mode 100644 index 000000000..da8f8dd2e --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/Logger.java @@ -0,0 +1,35 @@ +package dev.ultreon.devices.api; + +public interface Logger { + void debug(String message); + + void debug(String message, Throwable t); + + void debug(String message, Object o); + + void debug(String message, Object o1, Object o2); + + void info(String message); + + void info(String message, Throwable t); + + void info(String message, Object o); + + void info(String message, Object o1, Object o2); + + void warn(String message); + + void warn(String message, Throwable t); + + void warn(String message, Object o); + + void warn(String message, Object o1, Object o2); + + void error(String message); + + void error(String message, Throwable t); + + void error(String message, Object o); + + void error(String message, Object o1, Object o2); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/SystemException.java b/common/src/main/java/dev/ultreon/devices/api/SystemException.java new file mode 100644 index 000000000..a61712d69 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/SystemException.java @@ -0,0 +1,19 @@ +package dev.ultreon.devices.api; + +public class SystemException extends RuntimeException { + public SystemException() { + super(); + } + + public SystemException(String message) { + super(message); + } + + public SystemException(String message, Throwable cause) { + super(message, cause); + } + + public SystemException(Throwable cause) { + super(cause); + } +} diff --git a/common/src/main/java/com/ultreon/devices/api/TrayItemAdder.java b/common/src/main/java/dev/ultreon/devices/api/TrayItemAdder.java similarity index 78% rename from common/src/main/java/com/ultreon/devices/api/TrayItemAdder.java rename to common/src/main/java/dev/ultreon/devices/api/TrayItemAdder.java index 2bc27296d..64f88ab57 100644 --- a/common/src/main/java/com/ultreon/devices/api/TrayItemAdder.java +++ b/common/src/main/java/dev/ultreon/devices/api/TrayItemAdder.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.api; +package dev.ultreon.devices.api; -import com.ultreon.devices.object.TrayItem; +import dev.ultreon.devices.object.TrayItem; import java.util.List; diff --git a/common/src/main/java/com/ultreon/devices/api/WorldSavedData.java b/common/src/main/java/dev/ultreon/devices/api/WorldSavedData.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/api/WorldSavedData.java rename to common/src/main/java/dev/ultreon/devices/api/WorldSavedData.java index fd77eaf99..e1987297e 100644 --- a/common/src/main/java/com/ultreon/devices/api/WorldSavedData.java +++ b/common/src/main/java/dev/ultreon/devices/api/WorldSavedData.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api; +package dev.ultreon.devices.api; import net.minecraft.nbt.CompoundTag; diff --git a/common/src/main/java/com/ultreon/devices/api/app/Alphabet.java b/common/src/main/java/dev/ultreon/devices/api/app/Alphabet.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/api/app/Alphabet.java rename to common/src/main/java/dev/ultreon/devices/api/app/Alphabet.java index 517975619..b33eeaed0 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/Alphabet.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/Alphabet.java @@ -1,7 +1,6 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/com/ultreon/devices/api/app/Application.java b/common/src/main/java/dev/ultreon/devices/api/app/Application.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/api/app/Application.java rename to common/src/main/java/dev/ultreon/devices/api/app/Application.java index 7bf08671b..3b330351b 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/Application.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/Application.java @@ -1,16 +1,15 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.Window; -import com.ultreon.devices.core.Wrappable; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.util.DataHandler; -import com.ultreon.devices.util.GLHelper; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.core.Wrappable; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.mineos.client.Window; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.util.DataHandler; +import dev.ultreon.devices.util.GLHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; @@ -29,7 +28,7 @@ public abstract class Application extends Wrappable implements DataHandler { @SuppressWarnings("FieldMayBeFinal") protected AppInfo info = null; public void setInfo(AppInfo info) { - if (StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass().equals(Devices.class)) { + if (StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass().equals(UltreonDevicesMod.class)) { this.info = info; return; } @@ -133,10 +132,10 @@ public void onTick() { * @param partialTicks the render partial ticks. */ @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { // GL11.glEnable(GL11.GL_SCISSOR_TEST); - GLHelper.pushScissor(x, y, width, height); + GLHelper.pushScissor(graphics, x, y, width, height); currentLayout.render(graphics, laptop, mc, x, y, mouseX, mouseY, active, partialTicks); GLHelper.popScissor(); @@ -281,6 +280,7 @@ public void onClose() { * * @param tag the tag compound where you saved data is */ + @Override public abstract void load(CompoundTag tag); /** @@ -290,6 +290,7 @@ public void onClose() { * * @param tag the tag compound to save your data to */ + @Override public abstract void save(CompoundTag tag); /** @@ -338,6 +339,7 @@ public final void clean() { needsDataUpdate = false; } + @Override public final void markForLayoutUpdate() { this.pendingLayoutUpdate = true; } diff --git a/common/src/main/java/com/ultreon/devices/api/app/Component.java b/common/src/main/java/dev/ultreon/devices/api/app/Component.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/api/app/Component.java rename to common/src/main/java/dev/ultreon/devices/api/app/Component.java index f45b915ac..5ee047cc9 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/Component.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/Component.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.programs.system.object.ColorScheme; +import dev.ultreon.devices.mineos.apps.system.object.ColorScheme; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; @@ -91,14 +91,14 @@ protected void handleTick() { * The main render loop. This is where you draw your component. * * @param graphics gui graphics helper - * @param laptop a Laptop instance + * @param laptop a MineOS instance * @param mc a Minecraft instance * @param mouseX the current x position of the mouse * @param mouseY the current y position of the mouse * @param windowActive if the window is active (at front) * @param partialTicks percentage passed in-between two ticks */ - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { } /** @@ -106,13 +106,13 @@ protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, * loop. * * @param graphics gui graphics helper - * @param laptop a Laptop instance + * @param laptop a MineOS instance * @param mc a Minecraft instance * @param mouseX the current x position of the mouse * @param mouseY the current y position of the mouse * @param windowActive if the window is active (at front) */ - protected void renderOverlay(GuiGraphics graphics, Laptop laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { + protected void renderOverlay(GuiGraphics graphics, MineOS laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { } /** @@ -244,7 +244,7 @@ public void setVisible(boolean visible) { * @return */ protected ColorScheme getColorScheme() { - return Laptop.getSystem().getSettings().getColorScheme(); + return MineOS.getOpened().getSettings().getColorScheme(); } public void drawVerticalLine(GuiGraphics graphics, int x, int y1, int y2, int rgb) { diff --git a/common/src/main/java/com/ultreon/devices/api/app/Dialog.java b/common/src/main/java/dev/ultreon/devices/api/app/Dialog.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/api/app/Dialog.java rename to common/src/main/java/dev/ultreon/devices/api/app/Dialog.java index ef60f0ca5..96a27dcd2 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/Dialog.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/Dialog.java @@ -1,29 +1,29 @@ -package com.ultreon.devices.api.app; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.ItemList; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.api.app.listener.ClickListener; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.block.entity.PrinterBlockEntity; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.Wrappable; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.network.NetworkDevice; -import com.ultreon.devices.core.network.task.TaskGetDevices; -import com.ultreon.devices.core.print.task.TaskPrint; -import com.ultreon.devices.programs.system.component.FileBrowser; -import com.ultreon.devices.programs.system.object.ColorScheme; -import com.ultreon.devices.util.GLHelper; +package dev.ultreon.devices.api.app; + +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.TextField; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.core.Wrappable; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.network.NetworkDevice; +import dev.ultreon.devices.core.network.task.TaskGetDevices; +import dev.ultreon.devices.core.print.task.TaskPrint; +import dev.ultreon.devices.init.DeviceBlockEntities; +import dev.ultreon.devices.mineos.apps.system.component.FileBrowser; +import dev.ultreon.devices.mineos.apps.system.object.ColorScheme; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GLHelper; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -31,6 +31,7 @@ import net.minecraft.nbt.Tag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; + import java.awt.*; import java.util.function.Predicate; @@ -44,11 +45,11 @@ public abstract class Dialog extends Wrappable { private boolean pendingLayoutUpdate = true; private boolean pendingClose = false; - public Dialog() { + protected Dialog() { this.defaultLayout = new Layout(150, 40); } - protected final void addComponent(com.ultreon.devices.api.app.Component c) { + protected final void addComponent(dev.ultreon.devices.api.app.Component c) { if (c != null) { defaultLayout.addComponent(c); c.init(defaultLayout); @@ -78,8 +79,8 @@ public void onTick() { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { - GLHelper.pushScissor(x, y, width, height); + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { + GLHelper.pushScissor(graphics, x, y, width, height); customLayout.render(graphics, laptop, mc, x, y, mouseX, mouseY, active, partialTicks); GLHelper.popScissor(); @@ -165,6 +166,7 @@ public void updateComponents(int x, int y) { @Override public void onClose() { + super.onClose(); } public void close() { @@ -243,8 +245,8 @@ public static class Confirmation extends Dialog { private ClickListener positiveListener; private ClickListener negativeListener; - private com.ultreon.devices.api.app.component.Button buttonPositive; - private com.ultreon.devices.api.app.component.Button buttonNegative; + private dev.ultreon.devices.api.app.component.Button buttonPositive; + private dev.ultreon.devices.api.app.component.Button buttonNegative; public Confirmation() { } @@ -268,7 +270,7 @@ public void init(@Nullable CompoundTag intent) { this.addComponent(message); int positiveWidth = Minecraft.getInstance().font.width(positiveText); - buttonPositive = new com.ultreon.devices.api.app.component.Button(getWidth() - positiveWidth - DIVIDE_WIDTH, getHeight() - 20, positiveText); + buttonPositive = new dev.ultreon.devices.api.app.component.Button(getWidth() - positiveWidth - DIVIDE_WIDTH, getHeight() - 20, positiveText); buttonPositive.setSize(positiveWidth + 10, 16); buttonPositive.setClickListener((mouseX, mouseY, mouseButton) -> { if (positiveListener != null) { @@ -279,7 +281,7 @@ public void init(@Nullable CompoundTag intent) { this.addComponent(buttonPositive); int negativeWidth = Math.max(20, Minecraft.getInstance().font.width(negativeText)); - buttonNegative = new com.ultreon.devices.api.app.component.Button(getWidth() - DIVIDE_WIDTH - positiveWidth - DIVIDE_WIDTH - negativeWidth + 1, getHeight() - 20, negativeText); + buttonNegative = new dev.ultreon.devices.api.app.component.Button(getWidth() - DIVIDE_WIDTH - positiveWidth - DIVIDE_WIDTH - negativeWidth + 1, getHeight() - 20, negativeText); buttonNegative.setSize(negativeWidth + 10, 16); buttonNegative.setClickListener((mouseX, mouseY, mouseButton) -> { if (negativeListener != null) { @@ -341,9 +343,9 @@ public static class Input extends Dialog { private ResponseHandler responseListener; - private com.ultreon.devices.api.app.component.TextField textFieldInput; - private com.ultreon.devices.api.app.component.Button buttonPositive; - private com.ultreon.devices.api.app.component.Button buttonNegative; + private TextField textFieldInput; + private dev.ultreon.devices.api.app.component.Button buttonPositive; + private dev.ultreon.devices.api.app.component.Button buttonNegative; public Input() { } @@ -373,13 +375,13 @@ public void init(@Nullable CompoundTag intent) { this.addComponent(message); } - textFieldInput = new com.ultreon.devices.api.app.component.TextField(5, 5 + offset, getWidth() - 10); + textFieldInput = new TextField(5, 5 + offset, getWidth() - 10); textFieldInput.setText(inputText); textFieldInput.setFocused(true); this.addComponent(textFieldInput); int positiveWidth = Minecraft.getInstance().font.width(positiveText); - buttonPositive = new com.ultreon.devices.api.app.component.Button(getWidth() - positiveWidth - DIVIDE_WIDTH, getHeight() - 20, positiveText); + buttonPositive = new dev.ultreon.devices.api.app.component.Button(getWidth() - positiveWidth - DIVIDE_WIDTH, getHeight() - 20, positiveText); buttonPositive.setSize(positiveWidth + 10, 16); buttonPositive.setClickListener((mouseX, mouseY, mouseButton) -> { if (!textFieldInput.getText().isEmpty()) { @@ -393,7 +395,7 @@ public void init(@Nullable CompoundTag intent) { this.addComponent(buttonPositive); int negativeWidth = Minecraft.getInstance().font.width(negativeText); - buttonNegative = new com.ultreon.devices.api.app.component.Button(getWidth() - DIVIDE_WIDTH - positiveWidth - DIVIDE_WIDTH - negativeWidth + 1, getHeight() - 20, negativeText); + buttonNegative = new dev.ultreon.devices.api.app.component.Button(getWidth() - DIVIDE_WIDTH - positiveWidth - DIVIDE_WIDTH - negativeWidth + 1, getHeight() - 20, negativeText); buttonNegative.setSize(negativeWidth + 10, 16); buttonNegative.setClickListener((mouseX, mouseY, mouseButton) -> close()); this.addComponent(buttonNegative); @@ -418,7 +420,7 @@ public void setInputText(@NotNull String inputText) { * @return the input text field */ @Nullable - public com.ultreon.devices.api.app.component.TextField getTextFieldInput() { + public TextField getTextFieldInput() { return textFieldInput; } @@ -469,8 +471,8 @@ public static class OpenFile extends Dialog { private Layout main; private FileBrowser browser; - private com.ultreon.devices.api.app.component.Button buttonPositive; - private com.ultreon.devices.api.app.component.Button buttonNegative; + private dev.ultreon.devices.api.app.component.Button buttonPositive; + private dev.ultreon.devices.api.app.component.Button buttonNegative; private ResponseHandler responseListener; private Predicate filter; @@ -490,16 +492,14 @@ public void init(@Nullable CompoundTag intent) { browser.openFolder(FileSystem.DIR_HOME); browser.setFilter(file -> filter == null || filter.test(file) || file.isFolder()); browser.setItemClickListener((file, index, mouseButton) -> { - if (mouseButton == 0) { - if (!file.isFolder()) { - buttonPositive.setEnabled(true); - } + if (mouseButton == 0 && !file.isFolder()) { + buttonPositive.setEnabled(true); } }); main.addComponent(browser); int positiveWidth = Minecraft.getInstance().font.width(positiveText); - buttonPositive = new com.ultreon.devices.api.app.component.Button(172, 106, positiveText); + buttonPositive = new dev.ultreon.devices.api.app.component.Button(172, 106, positiveText); buttonPositive.setSize(positiveWidth + 10, 16); buttonPositive.setEnabled(false); buttonPositive.setClickListener((mouseX, mouseY, mouseButton) -> { @@ -517,7 +517,7 @@ public void init(@Nullable CompoundTag intent) { main.addComponent(buttonPositive); int negativeWidth = Minecraft.getInstance().font.width(negativeText); - buttonNegative = new com.ultreon.devices.api.app.component.Button(125, 106, negativeText); + buttonNegative = new dev.ultreon.devices.api.app.component.Button(125, 106, negativeText); buttonNegative.setSize(negativeWidth + 10, 16); buttonNegative.setClickListener((mouseX, mouseY, mouseButton) -> close()); main.addComponent(buttonNegative); @@ -590,9 +590,9 @@ public static class SaveFile extends Dialog { private String negativeText = "Cancel"; private Layout main; private FileBrowser browser; - private com.ultreon.devices.api.app.component.TextField textFieldFileName; - private com.ultreon.devices.api.app.component.Button buttonPositive; - private com.ultreon.devices.api.app.component.Button buttonNegative; + private TextField textFieldFileName; + private dev.ultreon.devices.api.app.component.Button buttonPositive; + private dev.ultreon.devices.api.app.component.Button buttonNegative; private Predicate filter; private String path = FileSystem.DIR_HOME; @@ -620,55 +620,53 @@ public void init(@Nullable CompoundTag intent) { browser.openFolder(path); main.addComponent(browser); - buttonPositive = new com.ultreon.devices.api.app.component.Button(172, 125, positiveText); + buttonPositive = new dev.ultreon.devices.api.app.component.Button(172, 125, positiveText); buttonPositive.setClickListener((mouseX, mouseY, mouseButton) -> { - if (mouseButton == 0) { - if (!textFieldFileName.getText().isEmpty()) { - if (!FileSystem.PATTERN_FILE_NAME.matcher(textFieldFileName.getText()).matches()) { - Message dialog = new Message("File name may only contain letters, numbers, underscores and spaces."); - app.openDialog(dialog); - return; - } + if (mouseButton == 0 && !textFieldFileName.getText().isEmpty()) { + if (!FileSystem.PATTERN_FILE_NAME.matcher(textFieldFileName.getText()).matches()) { + Message dialog = new Message("File name may only contain letters, numbers, underscores and spaces."); + app.openDialog(dialog); + return; + } - File file; - if (name != null) { - file = File.fromTag(textFieldFileName.getText(), data); - } else { - file = new File(textFieldFileName.getText(), app, data.copy()); - } + File file; + if (name != null) { + file = File.fromTag(textFieldFileName.getText(), data); + } else { + file = new File(textFieldFileName.getText(), app, data.copy()); + } + + browser.addFile(file, (response, success) -> { + assert response != null; + if (response.getStatus() == FileSystem.Status.FILE_EXISTS) { + Confirmation dialog = new Confirmation("A file with that name already exists. Are you sure you want to override it?"); + dialog.setPositiveText("Override"); + dialog.setPositiveListener((mouseX1, mouseY1, mouseButton1) -> browser.addFile(file, true, (response1, success1) -> { + dialog.close(); - browser.addFile(file, (response, success) -> { - assert response != null; - if (response.getStatus() == FileSystem.Status.FILE_EXISTS) { - Confirmation dialog = new Confirmation("A file with that name already exists. Are you sure you want to override it?"); - dialog.setPositiveText("Override"); - dialog.setPositiveListener((mouseX1, mouseY1, mouseButton1) -> browser.addFile(file, true, (response1, success1) -> { - dialog.close(); - - //TODO Look into better handling. Get response from parent if should close. Maybe a response interface w/ generic - if (responseHandler != null) { - responseHandler.onResponse(success1, file); - } - SaveFile.this.close(); - })); - app.openDialog(dialog); - } else { + //TODO Look into better handling. Get response from parent if should close. Maybe a response interface w/ generic if (responseHandler != null) { - responseHandler.onResponse(true, file); + responseHandler.onResponse(success1, file); } - close(); + SaveFile.this.close(); + })); + app.openDialog(dialog); + } else { + if (responseHandler != null) { + responseHandler.onResponse(true, file); } - }); - } + close(); + } + }); } }); main.addComponent(buttonPositive); - buttonNegative = new com.ultreon.devices.api.app.component.Button(126, 125, negativeText); + buttonNegative = new dev.ultreon.devices.api.app.component.Button(126, 125, negativeText); buttonNegative.setClickListener((mouseX, mouseY, mouseButton) -> close()); main.addComponent(buttonNegative); - textFieldFileName = new com.ultreon.devices.api.app.component.TextField(26, 105, 180); + textFieldFileName = new TextField(26, 105, 180); textFieldFileName.setFocused(true); if (name != null) textFieldFileName.setText(name); main.addComponent(textFieldFileName); @@ -747,12 +745,12 @@ public static class Print extends Dialog { private final IPrint print; private Layout layoutMain; - private com.ultreon.devices.api.app.component.Label labelMessage; - private com.ultreon.devices.api.app.component.Button buttonRefresh; + private Label labelMessage; + private dev.ultreon.devices.api.app.component.Button buttonRefresh; private ItemList itemListPrinters; - private com.ultreon.devices.api.app.component.Button buttonPrint; - private com.ultreon.devices.api.app.component.Button buttonCancel; - private com.ultreon.devices.api.app.component.Button buttonInfo; + private dev.ultreon.devices.api.app.component.Button buttonPrint; + private dev.ultreon.devices.api.app.component.Button buttonCancel; + private dev.ultreon.devices.api.app.component.Button buttonInfo; public Print(IPrint print) { this.print = print; @@ -765,10 +763,10 @@ public void init(@Nullable CompoundTag intent) { layoutMain = new Layout(150, 132); - labelMessage = new com.ultreon.devices.api.app.component.Label("Select a Printer", 5, 5); + labelMessage = new Label("Select a Printer", 5, 5); layoutMain.addComponent(labelMessage); - buttonRefresh = new com.ultreon.devices.api.app.component.Button(131, 2, Icons.RELOAD); + buttonRefresh = new dev.ultreon.devices.api.app.component.Button(131, 2, Icons.RELOAD); buttonRefresh.setPadding(2); buttonRefresh.setToolTip("Refresh", "Retrieve an updated list of printers"); buttonRefresh.setClickListener((mouseX, mouseY, mouseButton) -> { @@ -783,10 +781,10 @@ public void init(@Nullable CompoundTag intent) { itemListPrinters.setListItemRenderer(new ListItemRenderer<>(16) { @Override public void render(GuiGraphics graphics, NetworkDevice networkDevice, Minecraft mc, int x, int y, int width, int height, boolean selected) { - ColorScheme colorScheme = Laptop.getSystem().getSettings().getColorScheme(); + ColorScheme colorScheme = MineOS.getOpened().getSettings().getColorScheme(); graphics.fill(x, y, x + width, y + height, selected ? colorScheme.getItemHighlightColor() : colorScheme.getItemBackgroundColor()); Icons.PRINTER.draw(graphics, mc, x + 3, y + 3); - RenderUtil.drawStringClipped(graphics, networkDevice.getName(), x + 18, y + 4, 118, Laptop.getSystem().getSettings().getColorScheme().getTextColor(), true); + RenderUtil.drawStringClipped(graphics, networkDevice.getName(), x + 18, y + 4, 118, MineOS.getOpened().getSettings().getColorScheme().getTextColor(), true); } }); itemListPrinters.setItemClickListener((blockPos, index, mouseButton) -> { @@ -796,7 +794,7 @@ public void render(GuiGraphics graphics, NetworkDevice networkDevice, Minecraft } }); itemListPrinters.sortBy((o1, o2) -> { - BlockPos laptopPos = Laptop.getPos(); + BlockPos laptopPos = MineOS.getOpened().getPos(); assert laptopPos != null; BlockPos pos1 = o1.getPos(); @@ -811,14 +809,14 @@ public void render(GuiGraphics graphics, NetworkDevice networkDevice, Minecraft }); layoutMain.addComponent(itemListPrinters); - buttonPrint = new com.ultreon.devices.api.app.component.Button(98, 108, "Print", Icons.CHECK); + buttonPrint = new dev.ultreon.devices.api.app.component.Button(98, 108, "Print", Icons.CHECK); buttonPrint.setPadding(5); buttonPrint.setEnabled(false); buttonPrint.setClickListener((mouseX, mouseY, mouseButton) -> { if (mouseButton == 0) { NetworkDevice networkDevice = itemListPrinters.getSelectedItem(); if (networkDevice != null) { - TaskPrint task = new TaskPrint(Laptop.getPos(), networkDevice, print); + TaskPrint task = new TaskPrint(MineOS.getOpened().getPos(), networkDevice, print); task.setCallback((tag, success) -> { if (success) { close(); @@ -830,7 +828,7 @@ public void render(GuiGraphics graphics, NetworkDevice networkDevice, Minecraft }); layoutMain.addComponent(buttonPrint); - buttonCancel = new com.ultreon.devices.api.app.component.Button(74, 108, Icons.CROSS); + buttonCancel = new dev.ultreon.devices.api.app.component.Button(74, 108, Icons.CROSS); buttonCancel.setPadding(5); buttonCancel.setClickListener((mouseX, mouseY, mouseButton) -> { if (mouseButton == 0) { @@ -839,7 +837,7 @@ public void render(GuiGraphics graphics, NetworkDevice networkDevice, Minecraft }); layoutMain.addComponent(buttonCancel); - buttonInfo = new com.ultreon.devices.api.app.component.Button(5, 108, Icons.HELP); + buttonInfo = new dev.ultreon.devices.api.app.component.Button(5, 108, Icons.HELP); buttonInfo.setEnabled(false); buttonInfo.setPadding(5); buttonInfo.setClickListener((mouseX, mouseY, mouseButton) -> { @@ -861,7 +859,7 @@ public void render(GuiGraphics graphics, NetworkDevice networkDevice, Minecraft private void getPrinters(ItemList itemList) { itemList.removeAll(); itemList.setLoading(true); - Task task = new TaskGetDevices(Laptop.getPos(), PrinterBlockEntity.class); + Task task = new TaskGetDevices(MineOS.getOpened().getPos(), DeviceBlockEntities.PRINTER.get()); task.setCallback((tag, success) -> { if (success) { assert tag != null; @@ -883,11 +881,11 @@ private static class Info extends Dialog { private final NetworkDevice entry; private Layout layoutMain; - private com.ultreon.devices.api.app.component.Label labelName; - private com.ultreon.devices.api.app.component.Image imagePaper; - private com.ultreon.devices.api.app.component.Label labelPaper; - private com.ultreon.devices.api.app.component.Label labelPosition; - private com.ultreon.devices.api.app.component.Button buttonClose; + private Label labelName; + private Image imagePaper; + private Label labelPaper; + private Label labelPosition; + private dev.ultreon.devices.api.app.component.Button buttonClose; private Info(NetworkDevice entry) { this.entry = entry; @@ -900,17 +898,17 @@ public void init(@Nullable CompoundTag intent) { layoutMain = new Layout(120, 70); - labelName = new com.ultreon.devices.api.app.component.Label(ChatFormatting.GOLD.toString() + ChatFormatting.BOLD + entry.getName(), 5, 5); + labelName = new Label(ChatFormatting.GOLD.toString() + ChatFormatting.BOLD + entry.getName(), 5, 5); layoutMain.addComponent(labelName); - labelPaper = new com.ultreon.devices.api.app.component.Label(ChatFormatting.DARK_GRAY + "Paper: " + ChatFormatting.RESET + 0, 5, 18); //TODO fix paper count + labelPaper = new Label(ChatFormatting.DARK_GRAY + "Paper: " + ChatFormatting.RESET + 0, 5, 18); //TODO fix paper count labelPaper.setAlignment(Component.ALIGN_LEFT); labelPaper.setShadow(false); layoutMain.addComponent(labelPaper); assert entry.getPos() != null; String position = ChatFormatting.DARK_GRAY + "X: " + ChatFormatting.RESET + entry.getPos().getX() + " " + ChatFormatting.DARK_GRAY + "Y: " + ChatFormatting.RESET + entry.getPos().getY() + " " + ChatFormatting.DARK_GRAY + "Z: " + ChatFormatting.RESET + entry.getPos().getZ(); - labelPosition = new com.ultreon.devices.api.app.component.Label(position, 5, 30); + labelPosition = new Label(position, 5, 30); labelPosition.setShadow(false); layoutMain.addComponent(labelPosition); diff --git a/common/src/main/java/com/ultreon/devices/api/app/IIcon.java b/common/src/main/java/dev/ultreon/devices/api/app/IIcon.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/api/app/IIcon.java rename to common/src/main/java/dev/ultreon/devices/api/app/IIcon.java index ff5753b7f..a1d975819 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/IIcon.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/IIcon.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Minecraft; diff --git a/common/src/main/java/com/ultreon/devices/api/app/Icons.java b/common/src/main/java/dev/ultreon/devices/api/app/Icons.java similarity index 98% rename from common/src/main/java/com/ultreon/devices/api/app/Icons.java rename to common/src/main/java/dev/ultreon/devices/api/app/Icons.java index 50adcc1d0..aac1257a1 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/Icons.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/Icons.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/com/ultreon/devices/api/app/Layout.java b/common/src/main/java/dev/ultreon/devices/api/app/Layout.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/api/app/Layout.java rename to common/src/main/java/dev/ultreon/devices/api/app/Layout.java index 7d24ddb43..0c2634e43 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/Layout.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/Layout.java @@ -1,11 +1,10 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.listener.InitListener; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.Wrappable; -import com.ultreon.devices.util.GLHelper; +import dev.ultreon.devices.api.app.listener.InitListener; +import dev.ultreon.devices.core.Wrappable; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GLHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; @@ -30,11 +29,11 @@ * @author MrCrayfish */ @SuppressWarnings("unused") -public class Layout extends com.ultreon.devices.api.app.Component { +public class Layout extends dev.ultreon.devices.api.app.Component { /** * The list of components in the layout */ - public List components; + public List components; /** * The width of the layout @@ -164,7 +163,7 @@ public void handleTick() { * @param y the starting y rendering position (top most) */ @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (!this.visible) return; @@ -175,14 +174,14 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int RenderSystem.setShaderColor(1f, 1f, 1f, 1f); for (var c : new ArrayList<>(components)) { RenderSystem.disableDepthTest(); - GLHelper.pushScissor(x, y, width, height); + GLHelper.pushScissor(graphics, x, y, width, height); c.render(graphics, laptop, mc, x + c.left, y + c.top, mouseX, mouseY, windowActive, partialTicks); GLHelper.popScissor(); } } @Override - public void renderOverlay(GuiGraphics graphics, Laptop laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { + public void renderOverlay(GuiGraphics graphics, MineOS laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { if (!visible) return; @@ -381,7 +380,7 @@ public Context(int width, int height) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); if (borderVisible) { drawHorizontalLine(graphics, x, x + width - 1, y, Color.DARK_GRAY.getRGB()); diff --git a/common/src/main/java/com/ultreon/devices/api/app/Notification.java b/common/src/main/java/dev/ultreon/devices/api/app/Notification.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/api/app/Notification.java rename to common/src/main/java/dev/ultreon/devices/api/app/Notification.java index 4d11380fd..dc06b6b52 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/Notification.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/Notification.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.core.client.ClientNotification; -import com.ultreon.devices.network.PacketHandler; -import com.ultreon.devices.network.task.NotificationPacket; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.core.client.ClientNotification; +import dev.ultreon.devices.network.PacketHandler; +import dev.ultreon.devices.network.task.NotificationPacket; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import org.apache.commons.lang3.StringUtils; diff --git a/common/src/main/java/com/ultreon/devices/api/app/ScrollableLayout.java b/common/src/main/java/dev/ultreon/devices/api/app/ScrollableLayout.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/api/app/ScrollableLayout.java rename to common/src/main/java/dev/ultreon/devices/api/app/ScrollableLayout.java index 694f5baa9..dcfd52ecf 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/ScrollableLayout.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/ScrollableLayout.java @@ -1,10 +1,9 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GLHelper; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GLHelper; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.util.Mth; @@ -42,17 +41,17 @@ public ScrollableLayout(int left, int top, int width, int height, int visibleHei } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (!visible) return; - GLHelper.pushScissor(x, y, width, visibleHeight); + GLHelper.pushScissor(graphics, x, y, width, visibleHeight); super.render(graphics, laptop, mc, x, y - scroll, mouseX, mouseY, windowActive, partialTicks); GLHelper.popScissor(); } @Override - public void renderOverlay(GuiGraphics graphics, Laptop laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { + public void renderOverlay(GuiGraphics graphics, MineOS laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { if (!visible) return; diff --git a/common/src/main/java/com/ultreon/devices/api/app/System.java b/common/src/main/java/dev/ultreon/devices/api/app/System.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/api/app/System.java rename to common/src/main/java/dev/ultreon/devices/api/app/System.java index 9e3efb1fe..c04f974cc 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/System.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/System.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.api.app; +package dev.ultreon.devices.api.app; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.core.Settings; -import com.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.mineos.client.Settings; +import dev.ultreon.devices.object.AppInfo; import it.unimi.dsi.fastutil.Pair; import net.minecraft.nbt.CompoundTag; diff --git a/common/src/main/java/dev/ultreon/devices/api/app/SystemAccessor.java b/common/src/main/java/dev/ultreon/devices/api/app/SystemAccessor.java new file mode 100644 index 000000000..4068f2f33 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/app/SystemAccessor.java @@ -0,0 +1,7 @@ +package dev.ultreon.devices.api.app; + +import dev.ultreon.devices.mineos.MineOSSystem; + +public interface SystemAccessor { + void sendSystem(MineOSSystem system); +} diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/Button.java b/common/src/main/java/dev/ultreon/devices/api/app/component/Button.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/api/app/component/Button.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/Button.java index cbd8bb149..3daced796 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/Button.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/Button.java @@ -1,13 +1,12 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.IIcon; -import com.ultreon.devices.api.app.listener.ClickListener; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; -import com.ultreon.devices.util.StringUtils; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.IIcon; +import dev.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.util.StringUtils; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; @@ -210,12 +209,12 @@ protected void handleTick() { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { RenderSystem.setShaderTexture(0, Component.COMPONENTS_GUI); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getButtonColor()); + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getButtonColor()); RenderSystem.setShaderColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1); this.hovered = GuiHelper.isMouseWithin(mouseX, mouseY, x, y, width, height) && windowActive; @@ -243,7 +242,7 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int RenderSystem.setShaderColor(1f, 1f, 1f, 1f); if (this.hovered) { - graphics.renderOutline(x, y, width, height, Laptop.getSystem().getSettings().getColorScheme().getButtonOutlineColor()); + graphics.renderOutline(x, y, width, height, MineOS.getOpened().getSettings().getColorScheme().getButtonOutlineColor()); } int contentWidth = (iconResource != null ? iconWidth : 0) + getTextWidth(text); @@ -266,7 +265,7 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int } @Override - public void renderOverlay(GuiGraphics graphics, Laptop laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { + public void renderOverlay(GuiGraphics graphics, MineOS laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { if (this.hovered && this.toolTip != null && toolTipTick >= TOOLTIP_DELAY) { laptop.renderComponentTooltip(graphics, Arrays.asList(net.minecraft.network.chat.Component.literal(this.toolTipTitle).withStyle(ChatFormatting.GOLD), net.minecraft.network.chat.Component.literal(this.toolTip)), mouseX, mouseY); } diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/ButtonToggle.java b/common/src/main/java/dev/ultreon/devices/api/app/component/ButtonToggle.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/api/app/component/ButtonToggle.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/ButtonToggle.java index 4d7775326..ef762129b 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/ButtonToggle.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/ButtonToggle.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; -import com.ultreon.devices.api.app.IIcon; +import dev.ultreon.devices.api.app.IIcon; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/CheckBox.java b/common/src/main/java/dev/ultreon/devices/api/app/component/CheckBox.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/api/app/component/CheckBox.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/CheckBox.java index 3d7f4ccab..b9eac3989 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/CheckBox.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/CheckBox.java @@ -1,11 +1,10 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.listener.ClickListener; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -57,7 +56,7 @@ public void setClickListener(ClickListener listener) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { if (group == null) { Color bgColor = new Color(getColorScheme().getBackgroundColor()); diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/ComboBox.java b/common/src/main/java/dev/ultreon/devices/api/app/component/ComboBox.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/api/app/component/ComboBox.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/ComboBox.java index 3fe72d4c8..79c00f3c1 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/ComboBox.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/ComboBox.java @@ -1,20 +1,18 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.listener.ChangeListener; -import com.ultreon.devices.api.app.renderer.ItemRenderer; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.listener.ChangeListener; +import dev.ultreon.devices.api.app.renderer.ItemRenderer; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; - import net.minecraft.client.gui.GuiGraphics; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; + import java.awt.*; /** @@ -43,7 +41,7 @@ public ComboBox(int left, int top, int width) { @Override public void handleTick() { super.handleTick(); - if (opened && !Laptop.getSystem().hasContext()) { + if (opened && !MineOS.getOpened().hasContext()) { opened = false; } } @@ -54,7 +52,7 @@ public void init(Layout layout) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { RenderSystem.setShaderTexture(0, Component.COMPONENTS_GUI); @@ -117,7 +115,7 @@ public void handleMouseClick(int mouseX, int mouseY, int mouseButton) { if (this.hovered && !this.opened) { this.opened = true; - Laptop.getSystem().openContext(this.layout, xPosition, yPosition + 13); + MineOS.getOpened().openContext(this.layout, xPosition, yPosition + 13); } } @@ -158,7 +156,7 @@ public void setChangeListener(ChangeListener changeListener) { } public void closeContext() { - Laptop.getSystem().closeContext(); + MineOS.getOpened().closeContext(); } public static class List extends ComboBox { @@ -203,7 +201,7 @@ public void init(Layout layout) { if (mouseButton == 0) { selected = t; updateValue(t); - Laptop.getSystem().closeContext(); + MineOS.getOpened().closeContext(); } }); this.layout.addComponent(list); diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/Image.java b/common/src/main/java/dev/ultreon/devices/api/app/component/Image.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/api/app/component/Image.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/Image.java index 866626b72..b404efc94 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/Image.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/Image.java @@ -1,17 +1,16 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.TextureUtil; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.IIcon; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.utils.OnlineRequest; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.IIcon; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.utils.OnlineRequest; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -62,13 +61,13 @@ public AppImage(int left, int top, int componentWidth, int componentHeight, AppI public void init(Layout layout) { super.init(layout); if (appInfo.getIcon().getBase().getU() == -1 && appInfo.getIcon().getBase().getV() == -1) { - var image = new Image(0, 0, componentWidth, componentHeight, 0, 0, 14, 14, 224, 224, Laptop.ICON_TEXTURES); + var image = new Image(0, 0, componentWidth, componentHeight, 0, 0, 14, 14, 224, 224, MineOS.ICON_TEXTURES); this.addComponent(image); return; } for (AppInfo.Icon.Glyph glyph : glyphs) { if (glyph.getU() == -1 || glyph.getV() == -1) continue; - var image = new Image(0, 0, componentWidth, componentHeight, glyph.getU(), glyph.getV(), 14, 14, 224, 224, Laptop.ICON_TEXTURES); + var image = new Image(0, 0, componentWidth, componentHeight, glyph.getU(), glyph.getV(), 14, 14, 224, 224, MineOS.ICON_TEXTURES); Supplier suscs = () -> { int tint = appInfo.getTint(glyph.getType()); var col = new Color(tint); @@ -249,7 +248,7 @@ protected void handleUnload() { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { if (loader != null && loader.setup) { image = loader.load(this); @@ -313,9 +312,9 @@ public void setImage(ResourceLocation resource) { this.drawFull = true; } - public void setImage(Laptop.Wallpaper wallpaper) { + public void setImage(MineOS.Wallpaper wallpaper) { if (wallpaper.isBuiltIn()) { - setImage(Laptop.getWallpapers().get(wallpaper.getLocation())); + setImage(MineOS.getWallpapers().get(wallpaper.getLocation())); } else { setImage(wallpaper.getUrl()); } @@ -467,8 +466,8 @@ public void setup(final Image image) { NativeImage nativeImage = NativeImage.read(in); - Laptop.runLater(() -> { - Devices.LOGGER.debug("Loaded image: " + url); + MineOS.runLater(() -> { + UltreonDevicesMod.LOGGER.debug("Loaded image: " + url); texture = new DynamicTexture(nativeImage); setup = true; }); @@ -517,7 +516,7 @@ private DynamicLoadedTexture(InputStream in, BufferedImage image) { @Override public void load(@NotNull ResourceManager resourceManager) throws IOException { NativeImage nativeImage = NativeImage.read(in); - Minecraft.getInstance().getTextureManager().register(Devices.id("dynamic_loaded/" + getId()), this); + Minecraft.getInstance().getTextureManager().register(UltreonDevicesMod.id("dynamic_loaded/" + getId()), this); this.upload(nativeImage); } diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/Inventory.java b/common/src/main/java/dev/ultreon/devices/api/app/component/Inventory.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/api/app/component/Inventory.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/Inventory.java index 20815f137..f6d503f32 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/Inventory.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/Inventory.java @@ -1,15 +1,13 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.listener.ClickListener; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -39,7 +37,7 @@ public Inventory(int left, int top) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { RenderSystem.setShaderColor(1f, 1f, 1f, 1f); RenderSystem.setShaderTexture(0, CHEST_GUI_TEXTURE); @@ -68,7 +66,7 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int } @Override - public void renderOverlay(GuiGraphics graphics, Laptop laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { + public void renderOverlay(GuiGraphics graphics, MineOS laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { if (this.visible) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 9; j++) { diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/ItemList.java b/common/src/main/java/dev/ultreon/devices/api/app/component/ItemList.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/api/app/component/ItemList.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/ItemList.java index 7e509f6f4..5bbc421ef 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/ItemList.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/ItemList.java @@ -1,20 +1,18 @@ -package com.ultreon.devices.api.app.component; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.listener.ItemClickListener; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; +package dev.ultreon.devices.api.app.component; + +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.listener.ItemClickListener; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.NonNullList; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; + import java.awt.*; import java.util.Collections; import java.util.Comparator; @@ -99,7 +97,7 @@ public void init(Layout layout) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { int height = 13; if (renderer != null) { @@ -143,7 +141,7 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int drawHorizontalLine(graphics, xPosition + 1, xPosition + width - 1, yPosition + (i * height) + i + height + 1, borderColor.getRGB()); } else { graphics.fill(xPosition + 1, yPosition + (i * 14) + 1, xPosition + width - 1, yPosition + 13 + (i * 14) + 1, (i + offset) != selected ? bgColor.brighter().getRGB() : bgColor.brighter().brighter().getRGB()); - graphics.drawString(Laptop.getFont(), item.toString(), xPosition + 3, yPosition + 3 + (i * 14), textColor); + graphics.drawString(MineOS.getFont(), item.toString(), xPosition + 3, yPosition + 3 + (i * 14), textColor); } } @@ -432,7 +430,7 @@ public void sort() { } @Override - public Iterator iterator() { + public @NotNull Iterator iterator() { return items.iterator(); } } diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/Label.java b/common/src/main/java/dev/ultreon/devices/api/app/component/Label.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/api/app/component/Label.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/Label.java index 8eb45e02e..26dedea4f 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/Label.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/Label.java @@ -1,8 +1,7 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -32,7 +31,7 @@ public Label(String text, int left, int top) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { graphics.pose().pushPose(); { diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/NumberSelector.java b/common/src/main/java/dev/ultreon/devices/api/app/component/NumberSelector.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/api/app/component/NumberSelector.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/NumberSelector.java index 68ebb164c..72440ffb6 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/NumberSelector.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/NumberSelector.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -17,7 +16,7 @@ public class NumberSelector extends Component { protected int min = 1; protected int max = 100; - /* Display Properties */ + /* GuiGraphics Properties */ protected int width; /* Sub Components */ @@ -71,7 +70,7 @@ public void init(Layout layout) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { } @Override diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/ProgressBar.java b/common/src/main/java/dev/ultreon/devices/api/app/component/ProgressBar.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/api/app/component/ProgressBar.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/ProgressBar.java index 50e31df08..a6ee8521e 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/ProgressBar.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/ProgressBar.java @@ -1,8 +1,7 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -32,7 +31,7 @@ public ProgressBar(int left, int top, int width, int height) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { Color bgColor = new Color(getColorScheme().getBackgroundColor()); graphics.fill(xPosition, yPosition, xPosition + width, yPosition + height, bgColor.darker().darker().getRGB()); diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/RadioGroup.java b/common/src/main/java/dev/ultreon/devices/api/app/component/RadioGroup.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/api/app/component/RadioGroup.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/RadioGroup.java index 398a4328a..3ecf91162 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/RadioGroup.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/RadioGroup.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import java.util.HashSet; import java.util.Set; diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/Slider.java b/common/src/main/java/dev/ultreon/devices/api/app/component/Slider.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/api/app/component/Slider.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/Slider.java index d385d9451..90dbdf581 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/Slider.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/Slider.java @@ -1,12 +1,11 @@ -package com.ultreon.devices.api.app.component; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.listener.ClickListener; -import com.ultreon.devices.api.app.listener.ReleaseListener; -import com.ultreon.devices.api.app.listener.SlideListener; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; +package dev.ultreon.devices.api.app.component; + +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.api.app.listener.ReleaseListener; +import dev.ultreon.devices.api.app.listener.SlideListener; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -41,7 +40,7 @@ public Slider(int left, int top, int width) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { Color bgColor = new Color(getColorScheme().getBackgroundColor()); graphics.fill(xPosition, yPosition + 4, xPosition + width, yPosition + 8, bgColor.darker().darker().getRGB()); diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/Spinner.java b/common/src/main/java/dev/ultreon/devices/api/app/component/Spinner.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/api/app/component/Spinner.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/Spinner.java index d9af4a2ae..38f4b91d4 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/Spinner.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/Spinner.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -34,7 +33,7 @@ public void handleTick() { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { RenderSystem.setShaderColor(1f, 1f, 1f, 1f); Color bgColor = new Color(getColorScheme().getBackgroundColor()).brighter().brighter(); diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/Text.java b/common/src/main/java/dev/ultreon/devices/api/app/component/Text.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/api/app/component/Text.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/Text.java index 3d1700594..226bded80 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/Text.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/Text.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -41,7 +40,7 @@ public Text(String text, int left, int top, int width) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { // DebugLog.log(lines.size() + ", " + rawText + ", " + lines); if (this.visible) { for (int i = 0; i < lines.size(); i++) { @@ -50,8 +49,8 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int text = text.substring(0, text.length() - 1); } assert text != null; - if (shadow) graphics.drawString(Laptop.getFont(), text, x + padding, y + (i * 10) + padding, textColor); - else graphics.drawString(Laptop.getFont(), text, x + padding, y + (i * 10) + padding, textColor, false); + if (shadow) graphics.drawString(MineOS.getFont(), text, x + padding, y + (i * 10) + padding, textColor); + else graphics.drawString(MineOS.getFont(), text, x + padding, y + (i * 10) + padding, textColor, false); } } } @@ -65,7 +64,7 @@ public void setText(String text) { rawText = text; text = text.replace("\\n", "\n"); var a = new ArrayList(); - Laptop.getFont().getSplitter().splitLines(FormattedText.of(text), width - padding * 2, Style.EMPTY).forEach(b -> a.add(b.getString())); + MineOS.getFont().getSplitter().splitLines(FormattedText.of(text), width - padding * 2, Style.EMPTY).forEach(b -> a.add(b.getString())); this.lines = a; } @@ -102,12 +101,12 @@ private void updateLines() { @Override protected void handleMouseClick(int mouseX, int mouseY, int mouseButton) { if (GuiHelper.isMouseWithin(mouseX, mouseY, xPosition + padding, yPosition + padding, width - padding * 2, getHeight() - padding * 2)) { - if (this.wordListener != null && lines.size() > 0) { + if (this.wordListener != null && !lines.isEmpty()) { int lineIndex = (mouseY - (yPosition + padding)) / 10; if (lineIndex < lines.size()) { int cursorX = mouseX - (xPosition + padding); String line = lines.get(lineIndex); - int index = Laptop.getFont().plainSubstrByWidth(line, cursorX).length(); + int index = MineOS.getFont().plainSubstrByWidth(line, cursorX).length(); String clickedWord = getWord(line, index); if (clickedWord != null) { this.wordListener.onWordClicked(clickedWord, mouseButton); diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/TextArea.java b/common/src/main/java/dev/ultreon/devices/api/app/component/TextArea.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/api/app/component/TextArea.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/TextArea.java index 94e62b2fd..c68ef7123 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/TextArea.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/TextArea.java @@ -1,25 +1,23 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.interfaces.IHighlight; -import com.ultreon.devices.api.app.listener.KeyListener; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.util.GLHelper; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.interfaces.IHighlight; +import dev.ultreon.devices.api.app.listener.KeyListener; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GLHelper; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.util.Mth; - import org.jetbrains.annotations.Nullable; + import java.awt.*; import java.util.ArrayList; import java.util.List; @@ -83,7 +81,7 @@ public class TextArea extends Component { */ public TextArea(int left, int top, int width, int height) { super(left, top); - this.font = Laptop.getFont(); + this.font = MineOS.getFont(); this.width = width; this.height = height; this.visibleLines = (int) Math.floor((float) ((height - padding * 2 + 1) / font.lineHeight)); @@ -96,7 +94,7 @@ public void handleTick() { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (this.visible) { RenderSystem.setShaderColor(1f, 1f, 1f, 1f); @@ -109,7 +107,7 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int RenderUtil.drawStringClipped(graphics, placeholder, x + padding, y + padding, width - padding * 2, placeholderColor, false); } - GLHelper.pushScissor(x + padding, y + padding, width - padding * 2, height - padding * 2); + GLHelper.pushScissor(graphics, x + padding, y + padding, width - padding * 2, height - padding * 2); for (int i = 0; i < visibleLines && i + verticalScroll < lines.size(); i++) { float scrollPercentage = (verticalScroll + verticalOffset) / (float) (lines.size() - visibleLines); float pixelsPerUnit = (float) maxLineWidth / (float) (width - padding * 2); @@ -134,7 +132,7 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int } GLHelper.popScissor(); - GLHelper.pushScissor(x + padding, y + padding - 1, width - padding * 2 + 1, height - padding * 2 + 1); + GLHelper.pushScissor(graphics, x + padding, y + padding - 1, width - padding * 2 + 1, height - padding * 2 + 1); if (editable && isFocused) { float linesPerUnit = (float) lines.size() / (float) visibleLines; int scroll = Mth.clamp(verticalScroll + verticalOffset * (int) linesPerUnit, 0, Math.max(0, lines.size() - visibleLines)); @@ -637,7 +635,7 @@ private void updateText() { for (int j = 0; j < split.size() - 1; j++) { updatedLines.add(split.get(j)); } - if (split.size() > 0) { + if (!split.isEmpty()) { updatedLines.add(split.get(split.size() - 1) + "\n"); } } @@ -646,7 +644,7 @@ private void updateText() { for (int i = 0; i < split.size() - 1; i++) { updatedLines.add(split.get(i)); } - if (split.size() > 0) { + if (!split.isEmpty()) { updatedLines.add(split.get(split.size() - 1)); } diff --git a/common/src/main/java/com/ultreon/devices/api/app/component/TextField.java b/common/src/main/java/dev/ultreon/devices/api/app/component/TextField.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/api/app/component/TextField.java rename to common/src/main/java/dev/ultreon/devices/api/app/component/TextField.java index ca0fcdebc..cce2c92cf 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/component/TextField.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/component/TextField.java @@ -1,11 +1,9 @@ -package com.ultreon.devices.api.app.component; +package dev.ultreon.devices.api.app.component; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.IIcon; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.IIcon; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import java.awt.*; @@ -27,7 +25,7 @@ public TextField(int left, int top, int width) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (icon != null) { RenderSystem.setShaderColor(1f, 1f, 1f, 1f); Color bgColor = new Color(color(backgroundColor, getColorScheme().getBackgroundColor())); diff --git a/common/src/main/java/com/ultreon/devices/api/app/interfaces/IHighlight.java b/common/src/main/java/dev/ultreon/devices/api/app/interfaces/IHighlight.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/api/app/interfaces/IHighlight.java rename to common/src/main/java/dev/ultreon/devices/api/app/interfaces/IHighlight.java index b733bff0f..f927358a5 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/interfaces/IHighlight.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/interfaces/IHighlight.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.interfaces; +package dev.ultreon.devices.api.app.interfaces; import net.minecraft.ChatFormatting; diff --git a/common/src/main/java/com/ultreon/devices/api/app/listener/ChangeListener.java b/common/src/main/java/dev/ultreon/devices/api/app/listener/ChangeListener.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/api/app/listener/ChangeListener.java rename to common/src/main/java/dev/ultreon/devices/api/app/listener/ChangeListener.java index ddb5fddcb..66ad0c117 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/listener/ChangeListener.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/listener/ChangeListener.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.listener; +package dev.ultreon.devices.api.app.listener; /** * The change listener interface. Used for handling value diff --git a/common/src/main/java/com/ultreon/devices/api/app/listener/ClickListener.java b/common/src/main/java/dev/ultreon/devices/api/app/listener/ClickListener.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/api/app/listener/ClickListener.java rename to common/src/main/java/dev/ultreon/devices/api/app/listener/ClickListener.java index f1bf446d0..0d5a0461b 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/listener/ClickListener.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/listener/ClickListener.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.listener; +package dev.ultreon.devices.api.app.listener; /** * The click listener interface. Used for handling clicks diff --git a/common/src/main/java/com/ultreon/devices/api/app/listener/InitListener.java b/common/src/main/java/dev/ultreon/devices/api/app/listener/InitListener.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/api/app/listener/InitListener.java rename to common/src/main/java/dev/ultreon/devices/api/app/listener/InitListener.java index 9d4e64037..6acd73fe4 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/listener/InitListener.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/listener/InitListener.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.listener; +package dev.ultreon.devices.api.app.listener; /** * The initialization listener interface. Used for running diff --git a/common/src/main/java/com/ultreon/devices/api/app/listener/ItemClickListener.java b/common/src/main/java/dev/ultreon/devices/api/app/listener/ItemClickListener.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/api/app/listener/ItemClickListener.java rename to common/src/main/java/dev/ultreon/devices/api/app/listener/ItemClickListener.java index b9b6c3f02..3c6282c80 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/listener/ItemClickListener.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/listener/ItemClickListener.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.listener; +package dev.ultreon.devices.api.app.listener; /** * The click listener interface. Used for handling clicks diff --git a/common/src/main/java/com/ultreon/devices/api/app/listener/KeyListener.java b/common/src/main/java/dev/ultreon/devices/api/app/listener/KeyListener.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/api/app/listener/KeyListener.java rename to common/src/main/java/dev/ultreon/devices/api/app/listener/KeyListener.java index 9ce206f4e..65993845f 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/listener/KeyListener.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/listener/KeyListener.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.listener; +package dev.ultreon.devices.api.app.listener; /** * @author MrCrayfish diff --git a/common/src/main/java/com/ultreon/devices/api/app/listener/ReleaseListener.java b/common/src/main/java/dev/ultreon/devices/api/app/listener/ReleaseListener.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/api/app/listener/ReleaseListener.java rename to common/src/main/java/dev/ultreon/devices/api/app/listener/ReleaseListener.java index 152d60f88..7527211ca 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/listener/ReleaseListener.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/listener/ReleaseListener.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.api.app.listener; +package dev.ultreon.devices.api.app.listener; -import com.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Component; /** * The release listener interface. Used for handling releasing diff --git a/common/src/main/java/com/ultreon/devices/api/app/listener/SlideListener.java b/common/src/main/java/dev/ultreon/devices/api/app/listener/SlideListener.java similarity index 78% rename from common/src/main/java/com/ultreon/devices/api/app/listener/SlideListener.java rename to common/src/main/java/dev/ultreon/devices/api/app/listener/SlideListener.java index d85be981b..a83c8046b 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/listener/SlideListener.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/listener/SlideListener.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.api.app.listener; +package dev.ultreon.devices.api.app.listener; -import com.ultreon.devices.api.app.component.Slider; +import dev.ultreon.devices.api.app.component.Slider; /** * The slider listener interface. Used for getting diff --git a/common/src/main/java/com/ultreon/devices/api/app/renderer/ItemRenderer.java b/common/src/main/java/dev/ultreon/devices/api/app/renderer/ItemRenderer.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/api/app/renderer/ItemRenderer.java rename to common/src/main/java/dev/ultreon/devices/api/app/renderer/ItemRenderer.java index fe971c21b..ef6c50acf 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/renderer/ItemRenderer.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/renderer/ItemRenderer.java @@ -1,6 +1,5 @@ -package com.ultreon.devices.api.app.renderer; +package dev.ultreon.devices.api.app.renderer; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; diff --git a/common/src/main/java/com/ultreon/devices/api/app/renderer/ListItemRenderer.java b/common/src/main/java/dev/ultreon/devices/api/app/renderer/ListItemRenderer.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/api/app/renderer/ListItemRenderer.java rename to common/src/main/java/dev/ultreon/devices/api/app/renderer/ListItemRenderer.java index 8734993c8..5fe248018 100644 --- a/common/src/main/java/com/ultreon/devices/api/app/renderer/ListItemRenderer.java +++ b/common/src/main/java/dev/ultreon/devices/api/app/renderer/ListItemRenderer.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.app.renderer; +package dev.ultreon.devices.api.app.renderer; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/Bios.java b/common/src/main/java/dev/ultreon/devices/api/bios/Bios.java new file mode 100644 index 000000000..51811b764 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/Bios.java @@ -0,0 +1,23 @@ +package dev.ultreon.devices.api.bios; + +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.os.OperatingSystem; +import dev.ultreon.devices.core.BootLoader; + +import java.util.UUID; + +public interface Bios { + void sendNotification(BiosNotification notification); + + boolean powerOff(); + + void addOperatingSystem(BootLoader operatingSystem); + + OperatingSystem getRunningOS(); + + Drive getMainDrive(); + + void setMainDrive(Drive drive); + + UUID getDeviceId(); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/BiosInterrupt.java b/common/src/main/java/dev/ultreon/devices/api/bios/BiosInterrupt.java new file mode 100644 index 000000000..a3a53fd2c --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/BiosInterrupt.java @@ -0,0 +1,6 @@ +package dev.ultreon.devices.api.bios; + +public interface BiosInterrupt { + void interrupt(T data); + +} diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/BiosNotification.java b/common/src/main/java/dev/ultreon/devices/api/bios/BiosNotification.java new file mode 100644 index 000000000..e6a85f20a --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/BiosNotification.java @@ -0,0 +1,10 @@ +package dev.ultreon.devices.api.bios; + +import dev.ultreon.devices.api.app.IIcon; + +public record BiosNotification( + IIcon icon, + String title, + String subTitle +) { +} diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/DoubleFaultInterrupt.java b/common/src/main/java/dev/ultreon/devices/api/bios/DoubleFaultInterrupt.java new file mode 100644 index 000000000..b86e1b8d6 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/DoubleFaultInterrupt.java @@ -0,0 +1,11 @@ +package dev.ultreon.devices.api.bios; + +import java.util.List; + +public record DoubleFaultInterrupt( + Throwable cause, + List ignoredCauses, + String message +) implements InterruptData { + +} diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/FaultInterrupt.java b/common/src/main/java/dev/ultreon/devices/api/bios/FaultInterrupt.java new file mode 100644 index 000000000..d3f8ad7fe --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/FaultInterrupt.java @@ -0,0 +1,8 @@ +package dev.ultreon.devices.api.bios; + +public record FaultInterrupt( + Throwable cause, + String message +) implements InterruptData { + +} diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/Font.java b/common/src/main/java/dev/ultreon/devices/api/bios/Font.java new file mode 100644 index 000000000..b68c6b500 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/Font.java @@ -0,0 +1,15 @@ +package dev.ultreon.devices.api.bios; + +import net.minecraft.resources.ResourceLocation; + +public interface Font { + int width(String text); + + String plainSubstrByWidth(String text, int width); + + Iterable splitLines(String s); + + int lineHeight(); + + ResourceLocation resourcePath(); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/InterruptData.java b/common/src/main/java/dev/ultreon/devices/api/bios/InterruptData.java new file mode 100644 index 000000000..1e6aaf2a1 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/InterruptData.java @@ -0,0 +1,5 @@ +package dev.ultreon.devices.api.bios; + +public sealed interface InterruptData permits DoubleFaultInterrupt, FaultInterrupt, PowerModeInterrupt { + +} diff --git a/common/src/main/java/dev/ultreon/devices/api/bios/PowerModeInterrupt.java b/common/src/main/java/dev/ultreon/devices/api/bios/PowerModeInterrupt.java new file mode 100644 index 000000000..968aa267a --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/bios/PowerModeInterrupt.java @@ -0,0 +1,12 @@ +package dev.ultreon.devices.api.bios; + +public record PowerModeInterrupt( + PowerMode powerMode +) implements InterruptData { + public enum PowerMode { + SLEEP, + HIBERNATE, + REBOOT, + SHUTDOWN + } +} diff --git a/common/src/main/java/dev/ultreon/devices/api/device/AudioDevice.java b/common/src/main/java/dev/ultreon/devices/api/device/AudioDevice.java new file mode 100644 index 000000000..0512d7044 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/device/AudioDevice.java @@ -0,0 +1,5 @@ +package dev.ultreon.devices.api.device; + +public interface AudioDevice extends Device { + void playSound(String sound); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/device/Device.java b/common/src/main/java/dev/ultreon/devices/api/device/Device.java new file mode 100644 index 000000000..ed43d5d4f --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/device/Device.java @@ -0,0 +1,7 @@ +package dev.ultreon.devices.api.device; + +public interface Device { + boolean isPresent(); + + boolean isConnected(); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/device/MousePointer.java b/common/src/main/java/dev/ultreon/devices/api/device/MousePointer.java new file mode 100644 index 000000000..d89542569 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/device/MousePointer.java @@ -0,0 +1,7 @@ +package dev.ultreon.devices.api.device; + +public interface MousePointer { + float getY(); + + float getX(); +} diff --git a/common/src/main/java/com/ultreon/devices/api/event/LaptopEvent.java b/common/src/main/java/dev/ultreon/devices/api/event/LaptopEvent.java similarity index 55% rename from common/src/main/java/com/ultreon/devices/api/event/LaptopEvent.java rename to common/src/main/java/dev/ultreon/devices/api/event/LaptopEvent.java index ead5ad636..24c1da3a0 100644 --- a/common/src/main/java/com/ultreon/devices/api/event/LaptopEvent.java +++ b/common/src/main/java/dev/ultreon/devices/api/event/LaptopEvent.java @@ -1,14 +1,14 @@ -package com.ultreon.devices.api.event; +package dev.ultreon.devices.api.event; -import com.ultreon.devices.api.TrayItemAdder; -import com.ultreon.devices.core.Laptop; import dev.architectury.event.Event; import dev.architectury.event.EventFactory; +import dev.ultreon.devices.api.TrayItemAdder; +import dev.ultreon.devices.mineos.client.MineOS; public interface LaptopEvent { Event SETUP_TRAY_ITEMS = EventFactory.createLoop(); interface SetupTrayItems extends LaptopEvent { - void setupTrayItems(Laptop laptop, TrayItemAdder trayItems); + void setupTrayItems(MineOS laptop, TrayItemAdder trayItems); } } diff --git a/common/src/main/java/com/ultreon/devices/api/io/Drive.java b/common/src/main/java/dev/ultreon/devices/api/io/Drive.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/api/io/Drive.java rename to common/src/main/java/dev/ultreon/devices/api/io/Drive.java index 857229d52..d952a0b8f 100644 --- a/common/src/main/java/com/ultreon/devices/api/io/Drive.java +++ b/common/src/main/java/dev/ultreon/devices/api/io/Drive.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.api.io; +package dev.ultreon.devices.api.io; -import com.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.FileSystem; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; @@ -21,6 +21,12 @@ public Drive(CompoundTag driveTag) { this.type = Type.fromString(driveTag.getString("type")); } + public Drive(Type type, UUID uuid, String name) { + this.type = type; + this.uuid = uuid; + this.name = name; + } + /** * Gets the name of the Drive. * diff --git a/common/src/main/java/com/ultreon/devices/api/io/File.java b/common/src/main/java/dev/ultreon/devices/api/io/File.java similarity index 98% rename from common/src/main/java/com/ultreon/devices/api/io/File.java rename to common/src/main/java/dev/ultreon/devices/api/io/File.java index 1a6982904..743423f46 100644 --- a/common/src/main/java/com/ultreon/devices/api/io/File.java +++ b/common/src/main/java/dev/ultreon/devices/api/io/File.java @@ -1,13 +1,13 @@ -package com.ultreon.devices.api.io; +package dev.ultreon.devices.api.io; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.action.FileAction; -import com.ultreon.devices.programs.system.component.FileBrowser; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.action.FileAction; +import dev.ultreon.devices.mineos.apps.system.component.FileBrowser; import net.minecraft.nbt.CompoundTag; - import org.jetbrains.annotations.Nullable; + import java.util.Comparator; import java.util.Objects; diff --git a/common/src/main/java/com/ultreon/devices/api/io/Folder.java b/common/src/main/java/dev/ultreon/devices/api/io/Folder.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/api/io/Folder.java rename to common/src/main/java/dev/ultreon/devices/api/io/Folder.java index d21b0e5a5..1c235bab5 100644 --- a/common/src/main/java/com/ultreon/devices/api/io/Folder.java +++ b/common/src/main/java/dev/ultreon/devices/api/io/Folder.java @@ -1,22 +1,22 @@ -package com.ultreon.devices.api.io; - -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.action.FileAction; -import com.ultreon.devices.core.io.task.TaskGetFiles; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.programs.system.component.FileBrowser; +package dev.ultreon.devices.api.io; + +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.action.FileAction; +import dev.ultreon.devices.core.io.task.TaskGetFiles; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.system.component.FileBrowser; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; + import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -456,7 +456,7 @@ public void sync(@Nullable Callback callback) { if (!valid) throw new IllegalStateException("Folder must be added to the system before it can be synced"); if (!isSynced()) { - BlockPos pos = Laptop.getPos(); + BlockPos pos = MineOS.getOpened().getPos(); if (pos == null) { if (callback != null) { callback.execute(this, false); diff --git a/common/src/main/java/com/ultreon/devices/api/io/MimeType.java b/common/src/main/java/dev/ultreon/devices/api/io/MimeType.java similarity index 96% rename from common/src/main/java/com/ultreon/devices/api/io/MimeType.java rename to common/src/main/java/dev/ultreon/devices/api/io/MimeType.java index c5371eae8..277e3c606 100644 --- a/common/src/main/java/com/ultreon/devices/api/io/MimeType.java +++ b/common/src/main/java/dev/ultreon/devices/api/io/MimeType.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.api.io; +package dev.ultreon.devices.api.io; import net.minecraft.nbt.CompoundTag; diff --git a/common/src/main/java/dev/ultreon/devices/api/os/OSScreen.java b/common/src/main/java/dev/ultreon/devices/api/os/OSScreen.java new file mode 100644 index 000000000..98ddedb87 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/os/OSScreen.java @@ -0,0 +1,115 @@ +package dev.ultreon.devices.api.os; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.api.bios.InterruptData; +import dev.ultreon.devices.client.Display; +import dev.ultreon.devices.object.AppInfo; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; + +public abstract class OSScreen extends Screen implements OperatingSystem { + private Display display; + + protected OSScreen() { + super(Component.literal("Virtual Display")); + } + + @Override + public void init(GuiGraphics graphics) { + + } + + @Override + public void boot(Bios bios) { + + } + + @Override + public void render(GuiGraphics display) { + + } + + @Override + public void onShutdownRequest(ShutdownSource source) { + + } + + @Override + public boolean onBiosInterrupt(InterruptData interrupt) { + return false; + } + + @Override + public boolean mouseReleased(int mouseX, int mouseY, int state) { + return false; + } + + @Override + public Application openApplication(AppInfo info) { + return null; + } + + @Override + public Application openApplication(AppInfo info, CompoundTag intentTag) { + return null; + } + + @Override + public boolean isWorldLess() { + return false; + } + + @Override + public Screen getScreen() { + return null; + } + + @Override + public void connectDisplay(Display display) { + this.display = display; + this.width = display.getScreenWidth(); + this.height = display.getScreenHeight(); + } + + @Override + public void disconnectDisplay() { + this.display = null; + } + + public Display getDisplay() { + return display; + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + return false; + } + + @Override + public boolean mouseReleased(double mouseX, double mouseY, int button) { + return false; + } + + @Override + public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { + return false; + } + + @Override + public boolean mouseScrolled(double d, double e, double f, double g) { + return false; + } + + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + return false; + } + + @Override + public boolean charTyped(char codePoint, int modifiers) { + return false; + } +} diff --git a/common/src/main/java/dev/ultreon/devices/api/os/OperatingSystem.java b/common/src/main/java/dev/ultreon/devices/api/os/OperatingSystem.java new file mode 100644 index 000000000..9ee4afcbd --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/os/OperatingSystem.java @@ -0,0 +1,44 @@ +package dev.ultreon.devices.api.os; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.api.bios.InterruptData; +import dev.ultreon.devices.client.Display; +import dev.ultreon.devices.object.AppInfo; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.nbt.CompoundTag; + +public interface OperatingSystem { + void init(GuiGraphics graphics); + + void boot(Bios bios); + + void render(GuiGraphics display); + + void onShutdownRequest(ShutdownSource source); + + boolean onBiosInterrupt(InterruptData interrupt); + + boolean mouseReleased(double mouseX, double mouseY, int state); + + boolean mouseReleased(int mouseX, int mouseY, int state); + + void afterKeyboardAction(); + + boolean charTyped(char codePoint, int modifiers); + + boolean keyPressed(int keyCode, int scanCode, int modifiers); + + Application openApplication(AppInfo info); + + Application openApplication(AppInfo info, CompoundTag intentTag); + + boolean isWorldLess(); + + Screen getScreen(); + + void connectDisplay(Display display); + + void disconnectDisplay(); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/os/ShutdownSource.java b/common/src/main/java/dev/ultreon/devices/api/os/ShutdownSource.java new file mode 100644 index 000000000..eaed73ea8 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/os/ShutdownSource.java @@ -0,0 +1,5 @@ +package dev.ultreon.devices.api.os; + +public enum ShutdownSource { + POWER_BUTTON +} diff --git a/common/src/main/java/com/ultreon/devices/api/print/IPrint.java b/common/src/main/java/dev/ultreon/devices/api/print/IPrint.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/api/print/IPrint.java rename to common/src/main/java/dev/ultreon/devices/api/print/IPrint.java index 12c1387c9..83b874ccb 100644 --- a/common/src/main/java/com/ultreon/devices/api/print/IPrint.java +++ b/common/src/main/java/dev/ultreon/devices/api/print/IPrint.java @@ -1,13 +1,15 @@ -package com.ultreon.devices.api.print; +package dev.ultreon.devices.api.print; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.init.DeviceBlocks; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexConsumer; +import dev.ultreon.devices.init.DeviceBlocks; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; - import org.jetbrains.annotations.Nullable; //printing somethings takes makes ink cartridge take damage. cartridge can only stack to one @@ -78,6 +80,10 @@ static ItemStack generateItem(IPrint print) { Class getRenderer(); interface Renderer { - boolean render(PoseStack pose, CompoundTag data); + default boolean render(PoseStack pose, CompoundTag data) { + return render(pose, Tesselator.getInstance().getBuilder(), data, 0, 0, Direction.NORTH); + } + + boolean render(PoseStack pose, VertexConsumer buffer, CompoundTag data, int packedLight, int packedOverlay, Direction direction); } } diff --git a/common/src/main/java/com/ultreon/devices/api/print/PrintingManager.java b/common/src/main/java/dev/ultreon/devices/api/print/PrintingManager.java similarity index 77% rename from common/src/main/java/com/ultreon/devices/api/print/PrintingManager.java rename to common/src/main/java/dev/ultreon/devices/api/print/PrintingManager.java index d4646a32b..dcb49b570 100644 --- a/common/src/main/java/com/ultreon/devices/api/print/PrintingManager.java +++ b/common/src/main/java/dev/ultreon/devices/api/print/PrintingManager.java @@ -1,13 +1,13 @@ -package com.ultreon.devices.api.print; +package dev.ultreon.devices.api.print; import com.google.common.collect.HashBiMap; -import com.ultreon.devices.Devices; import dev.architectury.injectables.annotations.PlatformOnly; +import dev.ultreon.devices.UltreonDevicesMod; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.resources.ResourceLocation; - import org.jetbrains.annotations.Nullable; + import java.lang.reflect.InvocationTargetException; import java.util.Map; @@ -33,16 +33,16 @@ public static void setRegisteredRenders(Map registeredR public static void registerPrint(ResourceLocation identifier, Class classPrint) { try { classPrint.getConstructor().newInstance(); - if (Devices.getInstance().registerPrint(identifier, classPrint)) { - Devices.LOGGER.info("Registering print '" + classPrint.getName() + "'"); + if (UltreonDevicesMod.get().registerPrint(identifier, classPrint)) { + UltreonDevicesMod.LOGGER.info("Registering print '" + classPrint.getName() + "'"); registeredPrints.put(identifier.toString(), classPrint); } else { - Devices.LOGGER.error("The print '" + classPrint.getName() + "' could not be registered due to a critical error!"); + UltreonDevicesMod.LOGGER.error("The print '" + classPrint.getName() + "' could not be registered due to a critical error!"); } } catch (NoSuchMethodException e) { - Devices.LOGGER.error("The print '" + classPrint.getName() + "' is missing an empty constructor and could not be registered!"); + UltreonDevicesMod.LOGGER.error("The print '" + classPrint.getName() + "' is missing an empty constructor and could not be registered!"); } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - Devices.LOGGER.error("The print '" + classPrint.getName() + "' could not be registered due to a critical error!"); + UltreonDevicesMod.LOGGER.error("The print '" + classPrint.getName() + "' could not be registered due to a critical error!"); } } diff --git a/common/src/main/java/dev/ultreon/devices/api/storage/DataStorage.java b/common/src/main/java/dev/ultreon/devices/api/storage/DataStorage.java new file mode 100644 index 000000000..0cf17f3fb --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/storage/DataStorage.java @@ -0,0 +1,16 @@ +package dev.ultreon.devices.api.storage; + +import java.util.List; +import java.util.ServiceLoader; + +public interface DataStorage { + List> STORAGES = ServiceLoader.load(DataStorage.class).stream().toList(); + + static DataStorage findDataStorage(String id) { + return STORAGES.stream().map(ServiceLoader.Provider::get).filter(storage -> storage.id().equals(id)).findFirst().orElseThrow(() -> new IllegalArgumentException("No data storage found for id: " + id)); + } + + FileHandle get(String path); + + String id(); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/storage/FileHandle.java b/common/src/main/java/dev/ultreon/devices/api/storage/FileHandle.java new file mode 100644 index 000000000..c2ef0fd3d --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/storage/FileHandle.java @@ -0,0 +1,132 @@ +package dev.ultreon.devices.api.storage; + +import dev.ultreon.devices.UltreonDevicesMod; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtAccounter; +import net.minecraft.nbt.NbtIo; +import net.minecraft.resources.ResourceLocation; + +import java.io.*; +import java.util.List; + +public interface FileHandle { + default String readString() throws IOException { + try (InputStream read = read()) { + return new String(read.readAllBytes()); + } + } + + default byte[] readBytes() throws IOException { + try (InputStream read = read()) { + return read.readAllBytes(); + } + } + + default void writeString(String string) throws IOException { + try (OutputStream write = write()) { + write.write(string.getBytes()); + } + } + + default void writeBytes(byte[] bytes) throws IOException { + try (OutputStream write = write()) { + write.write(bytes); + } + } + + String path(); + + InputStream read() throws IOException; + + OutputStream write() throws IOException; + + default T read(Class clazz) throws IOException { + return UltreonDevicesMod.GSON.fromJson(reader(), clazz); + } + + default void write(T object) throws IOException { + write(UltreonDevicesMod.GSON.toJson(object)); + } + + default CompoundTag readNbt() throws IOException { + return NbtIo.read(dataReader(), NbtAccounter.unlimitedHeap()); + } + + default void writeNbt(CompoundTag ubo) throws IOException { + NbtIo.write(ubo, dataWriter()); + } + + default DataInput dataReader() throws IOException { + return new DataInputStream(read()); + } + + default DataOutput dataWriter() throws IOException { + return new DataOutputStream(write()); + } + + boolean isDirectory(); + + boolean isFile(); + + boolean isSymbolicLink(); + + long length() throws IOException; + + default boolean isReadable() { + return false; + } + + default boolean isWritable() { + return false; + } + + default Reader reader() throws IOException { + return new InputStreamReader(read()); + } + + default Writer writer() throws IOException { + return new OutputStreamWriter(write()); + } + + static FileHandle resource(ResourceLocation path) { + return DataStorage.findDataStorage("resource-path").get(path.toString()); + } + + static FileHandle storage(String path) { + return DataStorage.findDataStorage("storage").get(path); + } + + static FileHandle uri(String uri) { + return DataStorage.findDataStorage("uri").get(uri); + } + + default boolean isExecutable() { + return false; + } + + boolean exists(); + + default boolean isAccessible() { + return exists(); + } + + FileHandle get(String path); + + default CompoundTag readNbt(String path) throws IOException { + return get(path).readNbt(); + } + + default void writeNbt(String path, CompoundTag ubo) throws IOException { + get(path).writeNbt(ubo); + } + + void createDirs(); + + List listDir(); + + String fileName(); + + default String extension() { + return fileName().substring(fileName().lastIndexOf('.') + 1); + } +} diff --git a/common/src/main/java/com/ultreon/devices/api/task/Callback.java b/common/src/main/java/dev/ultreon/devices/api/task/Callback.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/api/task/Callback.java rename to common/src/main/java/dev/ultreon/devices/api/task/Callback.java index 5b4bd3dc7..fa5320d1c 100644 --- a/common/src/main/java/com/ultreon/devices/api/task/Callback.java +++ b/common/src/main/java/dev/ultreon/devices/api/task/Callback.java @@ -1,5 +1,6 @@ -package com.ultreon.devices.api.task; +package dev.ultreon.devices.api.task; +import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; /** @@ -13,7 +14,7 @@ public interface Callback { /** * Executes the callback. You should perform any changes to * your UI in this method. The NBT tag contains the same data - * as {@link Task#processResponse(NBTTagCompound)}'s + * as {@link Task#processResponse(CompoundTag)}'s * tag does. * * @param t the response object diff --git a/common/src/main/java/com/ultreon/devices/api/task/Task.java b/common/src/main/java/dev/ultreon/devices/api/task/Task.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/api/task/Task.java rename to common/src/main/java/dev/ultreon/devices/api/task/Task.java index 275553f7c..994c5716b 100644 --- a/common/src/main/java/com/ultreon/devices/api/task/Task.java +++ b/common/src/main/java/dev/ultreon/devices/api/task/Task.java @@ -1,7 +1,12 @@ -package com.ultreon.devices.api.task; +package dev.ultreon.devices.api.task; -import com.ultreon.devices.core.task.TaskInstallApp; -import com.ultreon.devices.debug.DebugLog; +import dev.architectury.utils.Env; +import dev.architectury.utils.EnvExecutor; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.client.Display; +import dev.ultreon.devices.core.task.TaskInstallApp; +import dev.ultreon.devices.debug.DebugLog; +import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -32,7 +37,7 @@ public Task(String name) { /** * Sets the callback for task. Used for processing responses, - * such as updating UI with new data. + * such as updating the UI with new data. * * @param callback the callback instance for response processing * @return this Task instance @@ -49,7 +54,15 @@ public final Task setCallback(Callback callback) { */ public final void callback(CompoundTag tag) { if (callback != null) { - callback.execute(tag, success); + EnvExecutor.runInEnv(Env.CLIENT, () -> () -> { + if (!Display.isOpen()) { + UltreonDevicesMod.LOGGER.warn("DEBUG CHECK: Task callback executed while no display is open!"); + return; + } + + Minecraft instance = Minecraft.getInstance(); + instance.submit(() -> callback.execute(tag, success)); + }); } } @@ -68,7 +81,7 @@ public final void setSuccessful() { * * @return if this task was successful */ - public final boolean isSucessful() { + public final boolean isSuccessful() { return this.success; } diff --git a/common/src/main/java/com/ultreon/devices/api/task/TaskManager.java b/common/src/main/java/dev/ultreon/devices/api/task/TaskManager.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/api/task/TaskManager.java rename to common/src/main/java/dev/ultreon/devices/api/task/TaskManager.java index e06b3aed8..3076a85e5 100644 --- a/common/src/main/java/com/ultreon/devices/api/task/TaskManager.java +++ b/common/src/main/java/dev/ultreon/devices/api/task/TaskManager.java @@ -1,11 +1,10 @@ -package com.ultreon.devices.api.task; +package dev.ultreon.devices.api.task; -import com.ultreon.devices.Devices; -import com.ultreon.devices.network.PacketHandler; -import com.ultreon.devices.network.task.RequestPacket; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.network.PacketHandler; +import dev.ultreon.devices.network.task.RequestPacket; import net.minecraft.client.Minecraft; -import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; @@ -30,7 +29,7 @@ private static TaskManager get() { public static void registerTask(Supplier clazz) { var task = clazz.get(); try { - Devices.LOGGER.info("Registering task '" + task.getName() + "'"); + UltreonDevicesMod.LOGGER.info("Registering task '" + task.getName() + "'"); get().registeredRequests.put(task.getName(), task); } catch (Exception e) { e.printStackTrace(); diff --git a/common/src/main/java/dev/ultreon/devices/api/util/Color.java b/common/src/main/java/dev/ultreon/devices/api/util/Color.java new file mode 100644 index 000000000..b42a240b6 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/util/Color.java @@ -0,0 +1,104 @@ +package dev.ultreon.devices.api.util; + +public class Color { + public static final Color WHITE = new Color(java.awt.Color.WHITE); + public static final Color BLACK = new Color(java.awt.Color.BLACK); + public static final Color RED = new Color(java.awt.Color.RED); + public static final Color GREEN = new Color(java.awt.Color.GREEN); + public static final Color BLUE = new Color(java.awt.Color.BLUE); + public static final Color YELLOW = new Color(java.awt.Color.YELLOW); + public static final Color CYAN = new Color(java.awt.Color.CYAN); + public static final Color MAGENTA = new Color(java.awt.Color.MAGENTA); + public static final Color ORANGE = new Color(java.awt.Color.ORANGE); + public static final Color PINK = new Color(java.awt.Color.PINK); + public static final Color GRAY = new Color(java.awt.Color.GRAY); + public static final Color DARK_GRAY = new Color(java.awt.Color.DARK_GRAY); + public static final Color LIGHT_GRAY = new Color(java.awt.Color.LIGHT_GRAY); + public static final Color TRANSPARENT = new Color(0, 0, 0, 0); + + private final java.awt.Color awtColor; + + public Color() { + this.awtColor = new java.awt.Color(0, 0, 0, 0); + } + + public Color(int color) { + this.awtColor = new java.awt.Color(color); + } + + public Color(int rgba, boolean alpha) { + this.awtColor = new java.awt.Color(rgba, alpha); + } + + public Color(float r, float g, float b, float a) { + this.awtColor = new java.awt.Color(r, g, b, a); + } + + public Color(float r, float g, float b) { + this.awtColor = new java.awt.Color(r, g, b, 1f); + } + + public Color(int r, int g, int b, int a) { + this.awtColor = new java.awt.Color(r / 255f, g / 255f, b / 255f, a / 255f); + } + + public Color(int r, int g, int b) { + this.awtColor = new java.awt.Color(r / 255f, g / 255f, b / 255f, 1f); + } + + public Color(java.awt.Color awtColor) { + this.awtColor = awtColor; + } + + public static float[] RGBtoHSB(int red, int green, int blue, float[] hsbVals) { + return java.awt.Color.RGBtoHSB(red, green, blue, hsbVals); + } + + public static int HSBtoRGB(float hue, float saturation, float brightness) { + return java.awt.Color.HSBtoRGB(hue, saturation, brightness); + } + + public java.awt.Color getAwtColor() { + return awtColor; + } + + public int getRGB() { + return awtColor.getRGB(); + } + + public int getRed() { + return awtColor.getRed(); + } + + public int getGreen() { + return awtColor.getGreen(); + } + + public int getBlue() { + return awtColor.getBlue(); + } + + public int getAlpha() { + return awtColor.getAlpha(); + } + + public float getRedF() { + return awtColor.getRed() / 255f; + } + + public float getGreenF() { + return awtColor.getGreen() / 255f; + } + + public float getBlueF() { + return awtColor.getBlue() / 255f; + } + + public float getAlphaF() { + return awtColor.getAlpha() / 255f; + } + + public Color brighter() { + return new Color(this.awtColor.brighter()); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/api/util/GuiHelper.java b/common/src/main/java/dev/ultreon/devices/api/util/GuiHelper.java new file mode 100644 index 000000000..c5f183bcb --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/util/GuiHelper.java @@ -0,0 +1,11 @@ +package dev.ultreon.devices.api.util; + +public class GuiHelper { + public static boolean isMouseInside(int mouseX, int mouseY, int x1, int y1, int x2, int y2) { + return mouseX >= x1 && mouseX < x2 && mouseY >= y1 && mouseY < y2; + } + + public static boolean isMouseWithin(int mouseX, int mouseY, int x, int y, int width, int height) { + return mouseX >= x && mouseX < x + width && mouseY >= y && mouseY < y + height; + } +} diff --git a/common/src/main/java/dev/ultreon/devices/api/util/ImageLoader.java b/common/src/main/java/dev/ultreon/devices/api/util/ImageLoader.java new file mode 100644 index 000000000..df858e1d4 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/util/ImageLoader.java @@ -0,0 +1,12 @@ +package dev.ultreon.devices.api.util; + +import dev.ultreon.devices.api.storage.FileHandle; + +import java.util.List; +import java.util.ServiceLoader; + +public interface ImageLoader { + List> LOADERS = ServiceLoader.load(ImageLoader.class).stream().toList(); + + ImageSource load(FileHandle handle); +} diff --git a/common/src/main/java/dev/ultreon/devices/api/util/ImageSource.java b/common/src/main/java/dev/ultreon/devices/api/util/ImageSource.java new file mode 100644 index 000000000..8d4cbc673 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/util/ImageSource.java @@ -0,0 +1,13 @@ +package dev.ultreon.devices.api.util; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; + +public interface ImageSource { + ResourceLocation resourcePath(); + + default CompoundTag save(CompoundTag mapType) { + mapType.putString("resourcePath", resourcePath().toString()); + return mapType; + } +} diff --git a/common/src/main/java/dev/ultreon/devices/api/util/Vulnerability.java b/common/src/main/java/dev/ultreon/devices/api/util/Vulnerability.java new file mode 100644 index 000000000..0b5241b7a --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/util/Vulnerability.java @@ -0,0 +1,74 @@ +package dev.ultreon.devices.api.util; + +import com.jab125.version.VersionPredicate; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.client.Display; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.TrayItem; +import org.jetbrains.annotations.Nullable; + +import java.util.Collection; + +public record Vulnerability(@Nullable String reporter, String title, @Nullable String description, int severity, Collection affectedVersions, Collection fixVersion, boolean affectsCurrentVersion) { + @Override + public String toString() { + return "Vulnerability{" + + "reporter='" + reporter + '\'' + + ", title='" + title + '\'' + + ", description='" + description + '\'' + + ", severity=" + severity + + ", affectedVersions=" + affectedVersions + + ", fixVersion='" + fixVersion + '\'' + + '}'; + } + + public String toPrettyString() { + return """ + Vulnerability { + reporter = '%s' + title = '%s' + description = '%s' + severity = %s + affectedVersions = %s + fixVersion = '%s' + }""".formatted(reporter, title, description, severity, affectedVersions, fixVersion); + } + + public static class VulnerabilityTrayItem extends TrayItem { + public VulnerabilityTrayItem() { + super(vulnerabilitiesAffectUs() ? Icons.WARNING : Icons.WARNING_GRAY, UltreonDevicesMod.res("vulnerabilities")); + } + private static boolean vulnerabilitiesAffectUs() { + return UltreonDevicesMod.getVulnerabilities().stream().anyMatch(Vulnerability::affectsCurrentVersion); + } + private final boolean vulnerabilities = vulnerabilitiesAffectUs(); + private int tick; + private boolean stat = false; + + @Override + public void tick() { + super.tick(); + if (!vulnerabilities) return; + if (tick >= 15) { + tick = 0; + this.setIcon(stat ? Icons.FLASHED_WARNING : Icons.WARNING); + stat = !stat; + } + tick++; + } + + @Override + public void handleClick(int mouseX, int mouseY, int mouseButton) { + AppInfo info = ApplicationManager.getApplication(UltreonDevicesMod.res("vulnerability")); + if (info != null) { + Display.get().getOS().openApplication(info); + } + } + } + + public int effectiveSeverity() { + return affectsCurrentVersion ? severity : 0; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/ultreon/devices/api/utils/BankUtil.java b/common/src/main/java/dev/ultreon/devices/api/utils/BankUtil.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/api/utils/BankUtil.java rename to common/src/main/java/dev/ultreon/devices/api/utils/BankUtil.java index 24cc06eed..2665f5e14 100644 --- a/common/src/main/java/com/ultreon/devices/api/utils/BankUtil.java +++ b/common/src/main/java/dev/ultreon/devices/api/utils/BankUtil.java @@ -1,13 +1,13 @@ -package com.ultreon.devices.api.utils; +package dev.ultreon.devices.api.utils; -import com.ultreon.devices.api.WorldSavedData; -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.programs.system.object.Account; -import com.ultreon.devices.programs.system.task.TaskAdd; -import com.ultreon.devices.programs.system.task.TaskGetBalance; -import com.ultreon.devices.programs.system.task.TaskPay; -import com.ultreon.devices.programs.system.task.TaskRemove; +import dev.ultreon.devices.api.WorldSavedData; +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.mineos.apps.system.object.Account; +import dev.ultreon.devices.mineos.apps.system.task.TaskAdd; +import dev.ultreon.devices.mineos.apps.system.task.TaskGetBalance; +import dev.ultreon.devices.mineos.apps.system.task.TaskPay; +import dev.ultreon.devices.mineos.apps.system.task.TaskRemove; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.world.entity.player.Player; @@ -94,6 +94,7 @@ public Account getAccount(UUID uuid) { return uuidToAccount.get(uuid); } + @Override public void save(CompoundTag tag) { ListTag accountList = new ListTag(); for (UUID uuid : uuidToAccount.keySet()) { @@ -106,6 +107,7 @@ public void save(CompoundTag tag) { tag.put("accounts", accountList); } + @Override public void load(CompoundTag tag) { ListTag accountList = (ListTag) tag.get("accounts"); for (int i = 0; i < accountList.size(); i++) { diff --git a/common/src/main/java/com/ultreon/devices/api/utils/OnlineRequest.java b/common/src/main/java/dev/ultreon/devices/api/utils/OnlineRequest.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/api/utils/OnlineRequest.java rename to common/src/main/java/dev/ultreon/devices/api/utils/OnlineRequest.java index 7924e5487..0de934e50 100644 --- a/common/src/main/java/com/ultreon/devices/api/utils/OnlineRequest.java +++ b/common/src/main/java/dev/ultreon/devices/api/utils/OnlineRequest.java @@ -1,6 +1,7 @@ -package com.ultreon.devices.api.utils; +package dev.ultreon.devices.api.utils; -import com.ultreon.devices.util.StreamUtils; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.util.StreamUtils; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ssl.NoopHostnameVerifier; @@ -48,25 +49,26 @@ public static OnlineRequest getInstance() { } public static void checkURLForSuspicions(URL url) throws IOException { - if (!isSafe(url.getHost()) || !url.getProtocol().equals("https")) { + if (isUnsafe(url.getHost()) || !url.getProtocol().equals("https")) { throw new IOException("Unsafe URL"); } } - public static boolean isSafeAddress(String address) { + public static boolean isUnsafeAddress(String address) { try { URL url = new URL(address); - return isSafe(url.getHost()); + return isUnsafe(url.getHost()); } catch (Exception e) { - return false; + return true; } } // ignore that - private static boolean isSafe(String host) { + private static boolean isUnsafe(String host) { return switch (host) { - case "ultreon.gitlab.io", "cdn.discordapp.com", "jab125.com", "jab125.dev", "raw.githubusercontent.com", "github.com", "i.imgur.com", "i.giphy.com", "avatars1.githubusercontent.com" -> true; - default -> false; + case "ultreon.gitlab.io", "cdn.discordapp.com", "jab125.com", "jab125.dev", "raw.githubusercontent.com", + "github.com", "i.imgur.com", "i.giphy.com", "avatars1.githubusercontent.com" -> false; + default -> true; }; } @@ -125,7 +127,7 @@ public void run() { URL url = new URL(wrapper.url); checkURLForSuspicions(url); } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("Error parsing URL: {}", wrapper.url); wrapper.handler.handle(false, "DOMAIN NOT BLACKLISTED/ERROR PARSING DOMAIN"); continue; } @@ -136,7 +138,7 @@ public void run() { wrapper.handler.handle(true, raw); } } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("Error making request: {}", wrapper.url, e); wrapper.handler.handle(false, ""); } } diff --git a/common/src/main/java/com/ultreon/devices/api/utils/RenderUtil.java b/common/src/main/java/dev/ultreon/devices/api/utils/RenderUtil.java similarity index 55% rename from common/src/main/java/com/ultreon/devices/api/utils/RenderUtil.java rename to common/src/main/java/dev/ultreon/devices/api/utils/RenderUtil.java index 449733a21..78f7ac63a 100644 --- a/common/src/main/java/com/ultreon/devices/api/utils/RenderUtil.java +++ b/common/src/main/java/dev/ultreon/devices/api/utils/RenderUtil.java @@ -1,19 +1,25 @@ -package com.ultreon.devices.api.utils; +package dev.ultreon.devices.api.utils; import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; - import org.jetbrains.annotations.Nullable; +import org.joml.Matrix3f; +import org.joml.Vector3f; +import org.joml.Vector4f; +import org.lwjgl.opengl.GL11; + import java.awt.*; @SuppressWarnings("unused") @@ -41,19 +47,19 @@ public static void renderItem(GuiGraphics graphics, int x, int y, ItemStack stac public static void drawIcon(GuiGraphics graphics, double x, double y, AppInfo info, int width, int height) { //Gui.blit(pose, (int) x, (int) y, width, height, u, v, sourceWidth, sourceHeight, (int) textureWidth, (int) textureHeight); if (info == null || (info.getIcon().getBase().getU() == -1 && info.getIcon().getBase().getV() == -1)) { - RenderSystem.setShaderTexture(0, Laptop.ICON_TEXTURES); - drawRectWithTexture(Laptop.ICON_TEXTURES, graphics, x, y, 0, 0, width, height, 14, 14, 224, 224); + RenderSystem.setShaderTexture(0, MineOS.ICON_TEXTURES); + drawRectWithTexture(MineOS.ICON_TEXTURES, graphics, x, y, 0, 0, width, height, 14, 14, 224, 224); return; } RenderSystem.enableBlend(); var glyphs = new AppInfo.Icon.Glyph[]{info.getIcon().getBase(), info.getIcon().getOverlay0(), info.getIcon().getOverlay1()}; - RenderSystem.setShaderTexture(0, Laptop.ICON_TEXTURES); + RenderSystem.setShaderTexture(0, MineOS.ICON_TEXTURES); for (AppInfo.Icon.Glyph glyph : glyphs) { if (glyph.getU() == -1 || glyph.getV() == -1) continue; var col = new Color(info.getTint(glyph.getType())); int[] tint = new int[]{col.getRed(), col.getGreen(), col.getBlue()}; RenderSystem.setShaderColor(tint[0]/255f, tint[1]/255f, tint[2]/255f, 1f); - drawRectWithTexture(Laptop.ICON_TEXTURES, graphics, x, y, glyph.getU(), glyph.getV(), width, height, 14, 14, 224, 224); + drawRectWithTexture(MineOS.ICON_TEXTURES, graphics, x, y, glyph.getU(), glyph.getV(), width, height, 14, 14, 224, 224); //image.init(layout); } RenderSystem.setShaderColor(1f, 1f, 1f, 1f); @@ -133,24 +139,100 @@ public static void drawRectWithTexture(ResourceLocation location, PoseStack pose BufferUploader.drawWithShader(buffer.end()); } + @Deprecated + public static void drawRectWithTexture2(ResourceLocation location, PoseStack pose, double x, double y, float u, float v, int width, int height, float textureWidth, float textureHeight, int sourceWidth, int sourceHeight) { + //Gui.blit(pose, (int) x, (int) y, width, height, u, v, sourceWidth, sourceHeight, (int) textureWidth, (int) textureHeight); + float scaleWidth = 1f / sourceWidth; + float scaleHeight = 1f / sourceHeight; + var e = pose.last().pose(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.vertex(e, (float) x, (float) (y + height), 0).uv(u * scaleWidth, (v + textureHeight) * scaleHeight).endVertex(); + buffer.vertex(e, (float) (x + width), (float) (y + height), 0).uv((u + textureWidth) * scaleWidth, (v + textureHeight) * scaleHeight).endVertex(); + buffer.vertex(e, (float) (x + width), (float) y, 0).uv((u + textureWidth) * scaleWidth, v * scaleHeight).endVertex(); + buffer.vertex(e, (float) x, (float) y, 0).uv(u * scaleWidth, v * scaleHeight).endVertex(); +// RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + RenderSystem.disableCull(); + RenderSystem.depthFunc(GL11.GL_LEQUAL); + Tesselator.getInstance().end(); + RenderSystem.enableCull(); +// BufferUploader.drawWithShader(buffer.end()); + } + + public static void drawRectWithTexture2(ResourceLocation location, PoseStack pose, double x, double y, float u, float v, int width, int height, float textureWidth, float textureHeight, int sourceWidth, int sourceHeight, int packedLight, int packedOverlay) { + //Gui.blit(pose, (int) x, (int) y, width, height, u, v, sourceWidth, sourceHeight, (int) textureWidth, (int) textureHeight); + float scaleWidth = 1f / sourceWidth; + float scaleHeight = 1f / sourceHeight; + var e = pose.last().pose(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.vertex(e, (float) x, (float) (y + height), 0).uv(u * scaleWidth, (v + textureHeight) * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).color(packedLight).endVertex(); + buffer.vertex(e, (float) (x + width), (float) (y + height), 0).uv((u + textureWidth) * scaleWidth, (v + textureHeight) * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).color(packedLight).endVertex(); + buffer.vertex(e, (float) (x + width), (float) y, 0).uv((u + textureWidth) * scaleWidth, v * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).color(packedLight).endVertex(); + buffer.vertex(e, (float) x, (float) y, 0).uv(u * scaleWidth, v * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).color(packedLight).endVertex(); + RenderSystem.disableCull(); + RenderSystem.depthFunc(GL11.GL_LEQUAL); + Tesselator.getInstance().end(); + RenderSystem.enableCull(); + } + + public static void drawRectWithTexture2(ResourceLocation location, PoseStack pose, double x, double y, float u, float v, int width, int height, float textureWidth, float textureHeight, int sourceWidth, int sourceHeight, int packedLight, int packedOverlay, float normalX, float normalY, float normalZ) { + //Gui.blit(pose, (int) x, (int) y, width, height, u, v, sourceWidth, sourceHeight, (int) textureWidth, (int) textureHeight); + float scaleWidth = 1f / sourceWidth; + float scaleHeight = 1f / sourceHeight; + var e = pose.last().pose(); + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.vertex(e, (float) x, (float) (y + height), 0).uv(u * scaleWidth, (v + textureHeight) * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).normal(normalX, normalY, normalZ).endVertex(); + buffer.vertex(e, (float) (x + width), (float) (y + height), 0).uv((u + textureWidth) * scaleWidth, (v + textureHeight) * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).normal(normalX, normalY, normalZ).endVertex(); + buffer.vertex(e, (float) (x + width), (float) y, 0).uv((u + textureWidth) * scaleWidth, v * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).normal(normalX, normalY, normalZ).endVertex(); + buffer.vertex(e, (float) x, (float) y, 0).uv(u * scaleWidth, v * scaleHeight).uv2(packedLight).overlayCoords(packedOverlay).normal(normalX, normalY, normalZ).endVertex(); + RenderSystem.disableCull(); + RenderSystem.depthFunc(GL11.GL_LEQUAL); + Tesselator.getInstance().end(); + RenderSystem.enableCull(); + } + + public static void drawRectInLevel(VertexConsumer buffer, PoseStack pose, float x, float y, float z, float u, float v, int width, int height, float textureWidth, float textureHeight, int sourceWidth, int sourceHeight, int packedLight, int packedOverlay, Direction direction) { + float scaleWidth = 1f / sourceWidth; + float scaleHeight = 1f / sourceHeight; + + // Get the normal of the last matrix + Matrix3f poseNormal = pose.last().normal(); + Vec3i normal = direction.getNormal(); + Vector3f transformedNor = poseNormal.transform(new Vector3f(normal.getX(), normal.getY(), normal.getZ())); + float normalX = transformedNor.x(); + float normalY = transformedNor.y(); + float normalZ = transformedNor.z(); + + // Draw the quad + Vector4f vector4f = pose.last().pose().transform(new Vector4f(x, y, z, 1.0F)); + buffer.vertex(x, y + height, 0, 1, 1, 1, 1, u * scaleWidth, (v + textureHeight) * scaleHeight, packedOverlay, packedLight, normalX, normalY, normalZ); + buffer.vertex(x + width, y + height, 0, 1, 1, 1, 1, (u + textureWidth) * scaleWidth, (v + textureHeight) * scaleHeight, packedOverlay, packedLight, normalX, normalY, normalZ); + buffer.vertex(x + width, y, 0, 1, 1, 1, 1, (u + textureWidth) * scaleWidth, v * scaleHeight, packedOverlay, packedLight, normalX, normalY, normalZ); + buffer.vertex(x, y, 0, 1, 1, 1, 1, u * scaleWidth, v * scaleHeight, packedOverlay, packedLight, normalX, normalY, normalZ); + } + public static void drawApplicationIcon(GuiGraphics graphics, @Nullable AppInfo info, double x, double y) { //TODO: Reset color GlStateManager.color(1f, 1f, 1f); - RenderSystem.setShaderTexture(0, Laptop.ICON_TEXTURES); + RenderSystem.setShaderTexture(0, MineOS.ICON_TEXTURES); if (info != null) { drawIcon(graphics, x, y, info, 14, 14); // drawRectWithTexture(pose, x, y, info.getIconU(), info.getIconV(), 14, 14, 14, 14, 224, 224); } else { - drawRectWithTexture(Laptop.ICON_TEXTURES, graphics, x, y, 0, 0, 14, 14, 14, 14, 224, 224); + drawRectWithTexture(MineOS.ICON_TEXTURES, graphics, x, y, 0, 0, 14, 14, 14, 14, 224, 224); } } public static void drawStringClipped(GuiGraphics graphics, String text, int x, int y, int width, int color, boolean shadow) { - if (shadow) graphics.drawString(Laptop.getFont(), clipStringToWidth(text, width) + ChatFormatting.RESET, x, y, color); - else graphics.drawString(Laptop.getFont(), Laptop.getFont().plainSubstrByWidth(text, width) + ChatFormatting.RESET, x, y, color, false); + if (shadow) graphics.drawString(MineOS.getFont(), clipStringToWidth(text, width) + ChatFormatting.RESET, x, y, color); + else graphics.drawString(MineOS.getFont(), MineOS.getFont().plainSubstrByWidth(text, width) + ChatFormatting.RESET, x, y, color, false); } public static String clipStringToWidth(String text, int width) { - Font fontRenderer = Laptop.getFont(); + Font fontRenderer = MineOS.getFont(); String clipped = text; if (fontRenderer.width(clipped) > width) { clipped = fontRenderer.plainSubstrByWidth(clipped, width - 8) + "..."; diff --git a/common/src/main/java/dev/ultreon/devices/api/video/CustomResolution.java b/common/src/main/java/dev/ultreon/devices/api/video/CustomResolution.java new file mode 100644 index 000000000..da24be008 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/api/video/CustomResolution.java @@ -0,0 +1,6 @@ +package dev.ultreon.devices.api.video; + +import dev.ultreon.devices.mineos.apps.system.DisplayResolution; + +public record CustomResolution(int width, int height) implements DisplayResolution { +} diff --git a/common/src/main/java/com/ultreon/devices/api/video/VideoInfo.java b/common/src/main/java/dev/ultreon/devices/api/video/VideoInfo.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/api/video/VideoInfo.java rename to common/src/main/java/dev/ultreon/devices/api/video/VideoInfo.java index 60e899a82..612060e19 100644 --- a/common/src/main/java/com/ultreon/devices/api/video/VideoInfo.java +++ b/common/src/main/java/dev/ultreon/devices/api/video/VideoInfo.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.api.video; +package dev.ultreon.devices.api.video; import com.mojang.blaze3d.platform.Window; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.programs.system.DisplayResolution; -import com.ultreon.devices.programs.system.PredefinedResolution; +import dev.ultreon.devices.mineos.apps.system.DisplayResolution; +import dev.ultreon.devices.mineos.apps.system.PredefinedResolution; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; @@ -28,7 +28,7 @@ public Collection getResolutionList() { public void setResolution(DisplayResolution value) { this.resolution = value; - Laptop.getInstance().revalidateDisplay(); + MineOS.getOpened().revalidateDisplay(); } public DisplayResolution getResolution() { diff --git a/common/src/main/java/dev/ultreon/devices/block/ClientLaptopWrapper.java b/common/src/main/java/dev/ultreon/devices/block/ClientLaptopWrapper.java new file mode 100644 index 000000000..a3a0d2eb2 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/block/ClientLaptopWrapper.java @@ -0,0 +1,18 @@ +package dev.ultreon.devices.block; + +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.client.Display; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; + +public class ClientLaptopWrapper { + + public static void execute(Player player, ComputerBlockEntity laptop) { + if (!laptop.isPoweredOn()) { + player.displayClientMessage(Component.translatable("message.devices.computer.not_powered"), true); + return; + } + Minecraft.getInstance().setScreen(Display.open(laptop)); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/block/ColoredBlock.java b/common/src/main/java/dev/ultreon/devices/block/ColoredBlock.java new file mode 100644 index 000000000..427bda679 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/block/ColoredBlock.java @@ -0,0 +1,6 @@ +package dev.ultreon.devices.block; + +import dev.ultreon.devices.util.Colored; + +public interface ColoredBlock extends Colored { +} diff --git a/common/src/main/java/com/ultreon/devices/block/ComputerBlock.java b/common/src/main/java/dev/ultreon/devices/block/ComputerBlock.java similarity index 54% rename from common/src/main/java/com/ultreon/devices/block/ComputerBlock.java rename to common/src/main/java/dev/ultreon/devices/block/ComputerBlock.java index f468115d5..f70dd127c 100644 --- a/common/src/main/java/com/ultreon/devices/block/ComputerBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/ComputerBlock.java @@ -1,13 +1,14 @@ -package com.ultreon.devices.block; - -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.block.entity.LaptopBlockEntity; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.item.FlashDriveItem; -import com.ultreon.devices.util.BlockEntityUtil; -import com.ultreon.devices.util.Colorable; +package dev.ultreon.devices.block; + import dev.architectury.utils.Env; import dev.architectury.utils.EnvExecutor; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.block.entity.LaptopBlockEntity; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.item.FlashDriveItem; +import dev.ultreon.devices.util.BlockEntityUtil; +import dev.ultreon.devices.util.Colorable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -50,52 +51,60 @@ public InteractionResult use(@NotNull BlockState state, @NotNull Level level, @N BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof LaptopBlockEntity laptop) { if (player.isCrouching()) { - if (!level.isClientSide) { - laptop.openClose(player); - } + if (!level.isClientSide) laptop.openClose(player); return InteractionResult.SUCCESS; } else { - if (hit.getDirection() == state.getValue(FACING).getClockWise(Direction.Axis.Y)) { - ItemStack heldItem = player.getItemInHand(hand); - if (!heldItem.isEmpty() && heldItem.getItem() instanceof FlashDriveItem) { - if (laptop.canChangeAttachment()) { - if (laptop.getFileSystem().attachDrive(heldItem.copy())) { - DebugLog.logTime(level.getGameTime(), "Attached Drive"); - laptop.setAttachmentCooldown(10); - heldItem.shrink(1); - return InteractionResult.sidedSuccess(level.isClientSide); - } else { - return InteractionResult.FAIL; - } - } - } + InteractionResult result = doAttachment(state, level, pos, player, hand, hit, laptop); + if (result != null) return result; + + if (!laptop.isOpen()) return InteractionResult.PASS; + if (!level.isClientSide) return InteractionResult.sidedSuccess(false); + if (!laptop.isPoweredOn()) laptop.powerOn(); + EnvExecutor.runInEnv(Env.CLIENT, () -> () -> ClientLaptopWrapper.execute(player, laptop)); + return InteractionResult.sidedSuccess(true); + } + } else if (blockEntity instanceof ComputerBlockEntity computer) { + if (level.isClientSide) { + EnvExecutor.runInEnv(Env.CLIENT, () -> () -> ClientLaptopWrapper.execute(player, computer)); + } + + return InteractionResult.sidedSuccess(level.isClientSide); + } else { + throw new IllegalStateException("Unexpected block entity: " + blockEntity); + } - if (laptop.canChangeAttachment()) { - ItemStack stack = laptop.getFileSystem().detachDrive(); - if (stack != null) { - DebugLog.logTime(level.getGameTime(), "Detached Drive"); - laptop.setAttachmentCooldown(10); - BlockPos summonPos = pos.relative(state.getValue(FACING).getClockWise(Direction.Axis.Y)); - level.addFreshEntity(new ItemEntity(level, summonPos.getX() + 0.5, summonPos.getY(), summonPos.getZ() + 0.5, stack)); - BlockEntityUtil.markBlockForUpdate(level, pos); - return InteractionResult.sidedSuccess(level.isClientSide); - } + } + + private static @Nullable InteractionResult doAttachment(@NotNull BlockState state, @NotNull Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult hit, LaptopBlockEntity laptop) { + if (hit.getDirection() == state.getValue(FACING).getClockWise(Direction.Axis.Y)) { + ItemStack heldItem = player.getItemInHand(hand); + if (!heldItem.isEmpty() && heldItem.getItem() instanceof FlashDriveItem) { + if (laptop.canChangeAttachment()) { + if (laptop.getFileSystem().attachDrive(heldItem.copy())) { + DebugLog.logTime(level.getGameTime(), "Attached Drive"); + laptop.setAttachmentCooldown(10); + heldItem.shrink(1); + return InteractionResult.sidedSuccess(level.isClientSide); + } else { + return InteractionResult.FAIL; } - return InteractionResult.FAIL; } + } - if (laptop.isOpen()) { - if (level.isClientSide) { - EnvExecutor.runInEnv(Env.CLIENT, () -> () -> { - ClientLaptopWrapper.execute(laptop); - }); - } + if (laptop.canChangeAttachment()) { + ItemStack stack = laptop.getFileSystem().detachDrive(); + if (stack != null) { + DebugLog.logTime(level.getGameTime(), "Detached Drive"); + laptop.setAttachmentCooldown(10); + BlockPos summonPos = pos.relative(state.getValue(FACING).getClockWise(Direction.Axis.Y)); + level.addFreshEntity(new ItemEntity(level, summonPos.getX() + 0.5, summonPos.getY(), summonPos.getZ() + 0.5, stack)); + BlockEntityUtil.markBlockForUpdate(level, pos); return InteractionResult.sidedSuccess(level.isClientSide); } } + return InteractionResult.FAIL; } - - return InteractionResult.PASS; + return null; } public abstract boolean isDesktopPC(); @@ -127,10 +136,12 @@ public String getSerializedName() { public static abstract class Colored extends ComputerBlock implements ColoredBlock { private final DyeColor color; + private final ModDeviceTypes deviceType; - protected Colored(Properties properties, DyeColor color, ModDeviceTypes deviceType) { + protected Colored(DyeColor color, ModDeviceTypes deviceType, Properties properties) { super(properties); this.color = color; + this.deviceType = deviceType; } @Override @@ -152,5 +163,10 @@ public void setPlacedBy(@NotNull Level level, @NotNull BlockPos pos, @NotNull Bl protected void createBlockStateDefinition(StateDefinition.@NotNull Builder pBuilder) { super.createBlockStateDefinition(pBuilder); } + + @Override + public ModDeviceTypes getDeviceType() { + return deviceType; + } } } diff --git a/common/src/main/java/com/ultreon/devices/block/DeviceBlock.java b/common/src/main/java/dev/ultreon/devices/block/DeviceBlock.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/block/DeviceBlock.java rename to common/src/main/java/dev/ultreon/devices/block/DeviceBlock.java index 2bbf1d7bd..d1ed0baab 100644 --- a/common/src/main/java/com/ultreon/devices/block/DeviceBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/DeviceBlock.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; -import com.ultreon.devices.IDeviceType; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.block.entity.DeviceBlockEntity; -import com.ultreon.devices.util.BlockEntityUtil; -import com.ultreon.devices.util.Colorable; +import dev.ultreon.devices.IDeviceType; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.block.entity.DeviceBlockEntity; +import dev.ultreon.devices.util.BlockEntityUtil; +import dev.ultreon.devices.util.Colorable; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; @@ -41,10 +41,10 @@ public DeviceBlock(Properties properties, ModDeviceTypes deviceType) { this.deviceType = deviceType; } -// @Override -// public RenderShape getRenderShape(BlockState state) { -// return RenderShape.INVISIBLE; -// } + @Override + public VoxelShape getVisualShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } @NotNull @Override @@ -71,7 +71,6 @@ public void setPlacedBy(@NotNull Level level, @NotNull BlockPos pos, @NotNull Bl } } - @Override public void destroy(LevelAccessor level, BlockPos pos, BlockState state) { if (!level.isClientSide()) { diff --git a/common/src/main/java/com/ultreon/devices/block/DigitalClockBlock.java b/common/src/main/java/dev/ultreon/devices/block/DigitalClockBlock.java similarity index 99% rename from common/src/main/java/com/ultreon/devices/block/DigitalClockBlock.java rename to common/src/main/java/dev/ultreon/devices/block/DigitalClockBlock.java index 6d3795d48..7fec259e1 100644 --- a/common/src/main/java/com/ultreon/devices/block/DigitalClockBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/DigitalClockBlock.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; //import dev.architectury.registry.block.BlockProperties; //import net.minecraft.client.Minecraft; diff --git a/common/src/main/java/com/ultreon/devices/block/FakeBlockPlaceContext.java b/common/src/main/java/dev/ultreon/devices/block/FakeBlockPlaceContext.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/block/FakeBlockPlaceContext.java rename to common/src/main/java/dev/ultreon/devices/block/FakeBlockPlaceContext.java index 5fa5ac78c..ec27e2e2c 100644 --- a/common/src/main/java/com/ultreon/devices/block/FakeBlockPlaceContext.java +++ b/common/src/main/java/dev/ultreon/devices/block/FakeBlockPlaceContext.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; diff --git a/common/src/main/java/com/ultreon/devices/block/LaptopBlock.java b/common/src/main/java/dev/ultreon/devices/block/LaptopBlock.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/block/LaptopBlock.java rename to common/src/main/java/dev/ultreon/devices/block/LaptopBlock.java index 6e5c30820..cced2b8c7 100644 --- a/common/src/main/java/com/ultreon/devices/block/LaptopBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/LaptopBlock.java @@ -1,33 +1,23 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.block.entity.LaptopBlockEntity; -import com.ultreon.devices.item.FlashDriveItem; -import com.ultreon.devices.util.BlockEntityUtil; -import dev.architectury.utils.Env; -import dev.architectury.utils.EnvExecutor; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.block.entity.LaptopBlockEntity; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -35,12 +25,16 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -import java.util.Locale; public class LaptopBlock extends ComputerBlock.Colored { public static final EnumProperty TYPE = EnumProperty.create("type", Type.class); public static final BooleanProperty OPEN = BooleanProperty.create("open"); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + DyeColor.CODEC.fieldOf("color").forGetter(Colored::getColor), + propertiesCodec() + ).apply(instance, LaptopBlock::new)); + private static final VoxelShape SHAPE_OPEN_NORTH = Shapes.or(Block.box(1, 0, 12.5, 15, 11.4, 17), Block.box(1, 0, 1, 15, 1.3, 12.5)); private static final VoxelShape SHAPE_OPEN_EAST = Shapes.or(Block.box(-1, 0, 1, 3.5, 11.4, 15), Block.box(3.5, 0, 1, 15, 1.3, 15)); private static final VoxelShape SHAPE_OPEN_SOUTH = Shapes.or(Block.box(1, 0, -1, 15, 11.4, 3.5), Block.box(1, 0, 3.5, 15, 1.3, 15)); @@ -49,9 +43,8 @@ public class LaptopBlock extends ComputerBlock.Colored { private static final VoxelShape SHAPE_CLOSED_EAST = Block.box(3, 0, 1, 15, 2, 15); private static final VoxelShape SHAPE_CLOSED_SOUTH = Block.box(1, 0, 3, 15, 2, 15); private static final VoxelShape SHAPE_CLOSED_WEST = Block.box(1, 0, 1, 13, 2, 15); - - public LaptopBlock(DyeColor color) { - super(Properties.of().mapColor(color).strength(6f).sound(SoundType.METAL), color, ModDeviceTypes.COMPUTER); + public LaptopBlock(DyeColor color, Properties properties) { + super(color, ModDeviceTypes.COMPUTER, properties); } @Override @@ -102,4 +95,9 @@ protected void removeTagsForDrop(CompoundTag tileEntityTag) { public @Nullable BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { return new LaptopBlockEntity(pos, state); } + + @Override + protected @NotNull MapCodec codec() { + return CODEC; + } } diff --git a/common/src/main/java/com/ultreon/devices/block/MacMaxXBlock.java b/common/src/main/java/dev/ultreon/devices/block/MacMaxXBlock.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/block/MacMaxXBlock.java rename to common/src/main/java/dev/ultreon/devices/block/MacMaxXBlock.java index 5ce8e2ccd..12747c42b 100644 --- a/common/src/main/java/com/ultreon/devices/block/MacMaxXBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/MacMaxXBlock.java @@ -1,8 +1,9 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; -import com.ultreon.devices.block.entity.MacMaxXBlockEntity; -import com.ultreon.devices.init.DeviceBlocks; +import com.mojang.serialization.MapCodec; import dev.architectury.platform.Platform; +import dev.ultreon.devices.block.entity.MacMaxXBlockEntity; +import dev.ultreon.devices.init.DeviceBlocks; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; @@ -10,16 +11,13 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; @@ -30,10 +28,12 @@ import org.jetbrains.annotations.Nullable; /** - * @author Qboi123 + * @author XyperCode */ @SuppressWarnings("deprecation") public class MacMaxXBlock extends ComputerBlock { + public static final MapCodec CODEC = simpleCodec(MacMaxXBlock::new); + private static final VoxelShape SHAPE_NORTH = Shapes.or( Block.box(-16, 31, 5, 32, 32, 7), Block.box(-15, 4, 5.5, 31, 32, 7), @@ -83,8 +83,13 @@ public class MacMaxXBlock extends ComputerBlock { Block.box(6.5, 0, 17, 9, 0.5, 23) ); - public MacMaxXBlock() { - super(BlockBehaviour.Properties.of().mapColor(DyeColor.WHITE).strength(6f).sound(SoundType.METAL).noOcclusion().dynamicShape()); + public MacMaxXBlock(Properties properties) { + super(properties); + } + + @Override + protected @NotNull MapCodec codec() { + return CODEC; } @Override @@ -148,7 +153,8 @@ private boolean hasBlock(Level level, BlockPos pos, InteractionHand hand, ItemSt return !(level.getBlockState(pos).isAir() || level.getBlockState(pos).canBeReplaced(new FakeBlockPlaceContext(level, hand, itemInHand, new BlockHitResult(Vec3.atCenterOf(pos), face, pos, false)))); } - public void setPlacedBy(@NotNull Level level, @NotNull BlockPos pos, BlockState state, LivingEntity placer, @NotNull ItemStack stack) { + @Override + public void setPlacedBy(@NotNull Level level, @NotNull BlockPos pos, @NotNull BlockState state, LivingEntity placer, @NotNull ItemStack stack) { if (state.isAir()) return; BlockState partState = DeviceBlocks.MAC_MAX_X_PART.get().defaultBlockState(); partState = partState.setValue(FACING, state.getValue(FACING)); @@ -183,7 +189,7 @@ public void setPlacedBy(@NotNull Level level, @NotNull BlockPos pos, BlockState } @Override - public void playerWillDestroy(@NotNull Level level, @NotNull BlockPos pos, BlockState state, @NotNull Player player) { + public @NotNull BlockState playerWillDestroy(@NotNull Level level, @NotNull BlockPos pos, BlockState state, @NotNull Player player) { switch (state.getValue(FACING)) { case NORTH -> { level.setBlock(pos.above().west(), Blocks.AIR.defaultBlockState(), 3); @@ -215,6 +221,7 @@ public void playerWillDestroy(@NotNull Level level, @NotNull BlockPos pos, Block } default -> throw new IllegalStateException("Unexpected value: " + state.getValue(FACING)); } + return state; } @Override @@ -223,7 +230,7 @@ public boolean isDesktopPC() { } @Override - public MutableComponent getName() { + public @NotNull MutableComponent getName() { MutableComponent normalName = Component.translatable("block.devices.mac_max_x"); if (Platform.isModLoaded("emojiful")) { return Component.translatable("block.devices.mac_max_x_emoji"); diff --git a/common/src/main/java/com/ultreon/devices/block/MacMaxXBlockPart.java b/common/src/main/java/dev/ultreon/devices/block/MacMaxXBlockPart.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/block/MacMaxXBlockPart.java rename to common/src/main/java/dev/ultreon/devices/block/MacMaxXBlockPart.java index 719af391c..885c23e61 100644 --- a/common/src/main/java/com/ultreon/devices/block/MacMaxXBlockPart.java +++ b/common/src/main/java/dev/ultreon/devices/block/MacMaxXBlockPart.java @@ -1,5 +1,6 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; +import com.mojang.serialization.MapCodec; import dev.architectury.platform.Platform; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -9,10 +10,12 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.EnumProperty; @@ -23,11 +26,13 @@ import org.jetbrains.annotations.NotNull; /** - * @author Qboi123 + * @author XyperCode */ public class MacMaxXBlockPart extends HorizontalDirectionalBlock { public static final EnumProperty PART = EnumProperty.create("part", Part.class); + public static final MapCodec CODEC = simpleCodec(MacMaxXBlockPart::new); + private static final VoxelShape BL_SHAPE_NORTH = Shapes.or( Block.box(-16 + 16, 31.0, 5.0, 32 + 16, 32.0, 7), Block.box(-15 + 16, 4.0, 5.5, 31 + 16, 32.0, 7), @@ -253,8 +258,8 @@ public class MacMaxXBlockPart extends HorizontalDirectionalBlock { Block.box(6.5, 0 - 16, -9 - 16, 9, 0.5 - 16, -3 - 16), Block.box(6.5, 0 - 16, 17 - 16, 9, 0.5 - 16, 23 - 16)); - public MacMaxXBlockPart() { - super(Properties.of().mapColor(DyeColor.WHITE).strength(6f).sound(SoundType.METAL)); + public MacMaxXBlockPart(Properties properties) { + super(properties); registerDefaultState(this.getStateDefinition().any().setValue(FACING, Direction.NORTH).setValue(PART, Part.T)); } @@ -311,7 +316,7 @@ public MacMaxXBlockPart() { } @Override - public void playerWillDestroy(@NotNull Level level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull Player player) { + public @NotNull BlockState playerWillDestroy(@NotNull Level level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull Player player) { BlockPos originPos = getOriginPos(pos, state); switch (state.getValue(FACING)) { case NORTH -> { @@ -345,6 +350,7 @@ public void playerWillDestroy(@NotNull Level level, @NotNull BlockPos pos, @NotN default -> throw new IllegalStateException("Unexpected value: " + state.getValue(FACING)); } destroyBlockExcept(level, pos, originPos, Blocks.AIR.defaultBlockState(), 3); + return state; } @SuppressWarnings("SameParameterValue") @@ -388,7 +394,7 @@ private static BlockPos getOriginPos(@NotNull BlockPos pos, BlockState state) { } @Override - public InteractionResult use(@NotNull BlockState state, Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult hit) { + public @NotNull InteractionResult use(@NotNull BlockState state, Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult hit) { BlockPos originPos = getOriginPos(pos, state); BlockState originState = level.getBlockState(originPos); if (originState.getBlock() instanceof MacMaxXBlock block) { @@ -398,7 +404,7 @@ public InteractionResult use(@NotNull BlockState state, Level level, @NotNull Bl } @Override - public MutableComponent getName() { + public @NotNull MutableComponent getName() { MutableComponent normalName = Component.translatable("block.devices.mac_max_x"); if (Platform.isModLoaded("emojiful")) { return Component.translatable("block.devices.mac_max_x_emoji"); @@ -407,7 +413,7 @@ public MutableComponent getName() { } @Override - public RenderShape getRenderShape(@NotNull BlockState state) { + public @NotNull RenderShape getRenderShape(@NotNull BlockState state) { return RenderShape.ENTITYBLOCK_ANIMATED; } @@ -417,11 +423,16 @@ protected void createBlockStateDefinition(StateDefinition.@NotNull Builder codec() { + return CODEC; + } + public enum Part implements StringRepresentable { BL, BR, TL, T, TR; @Override - public String getSerializedName() { + public @NotNull String getSerializedName() { return switch (this) { case BL -> "bottom_left"; case BR -> "bottom_right"; diff --git a/common/src/main/java/com/ultreon/devices/block/OfficeChairBlock.java b/common/src/main/java/dev/ultreon/devices/block/OfficeChairBlock.java similarity index 65% rename from common/src/main/java/com/ultreon/devices/block/OfficeChairBlock.java rename to common/src/main/java/dev/ultreon/devices/block/OfficeChairBlock.java index fac8d9021..557c09b0e 100644 --- a/common/src/main/java/com/ultreon/devices/block/OfficeChairBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/OfficeChairBlock.java @@ -1,15 +1,14 @@ -package com.ultreon.devices.block; - -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.block.entity.OfficeChairBlockEntity; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.entity.SeatEntity; -import com.ultreon.devices.util.SeatUtil; -import net.minecraft.Util; -import net.minecraft.client.Minecraft; +package dev.ultreon.devices.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.block.entity.OfficeChairBlockEntity; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.entity.SeatEntity; +import dev.ultreon.devices.util.SeatUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.StringRepresentable; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -19,8 +18,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.EnumProperty; @@ -30,20 +29,22 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.NotNull; - import org.jetbrains.annotations.Nullable; -public class OfficeChairBlock extends DeviceBlock.Colored -{ +public class OfficeChairBlock extends DeviceBlock.Colored { public static final EnumProperty TYPE = EnumProperty.create("type", Type.class); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + DyeColor.CODEC.fieldOf("color").forGetter(OfficeChairBlock::getColor), + propertiesCodec() + ).apply(instance, OfficeChairBlock::new)); + private static final VoxelShape EMPTY_BOX = Shapes.box(0, 0, 0, 0, 0, 0); private static final VoxelShape SELECTION_BOX = Shapes.box(0.0625f, 0, 0.0625f, 0.9375f, /*1.6875f*/0.625f, 0.9375f); private static final VoxelShape SEAT_BOUNDING_BOX = Shapes.box(0.0625f, 0, 0.0625f, 0.9375f, 0.625f, 0.9375f); - public OfficeChairBlock(DyeColor color) - { - super(BlockBehaviour.Properties.of().mapColor(color), color, ModDeviceTypes.SEAT); + public OfficeChairBlock(DyeColor color, Properties properties) { + super(properties, color, ModDeviceTypes.SEAT); //this.setUnlocalizedName("office_chair"); //this.setRegistryName("office_chair"); //this.setCreativeTab(MrCrayfishDeviceMod.TAB_DEVICE); @@ -56,8 +57,7 @@ public OfficeChairBlock(DyeColor color) // } @Override - public boolean canSurvive(BlockState state, LevelReader reader, BlockPos pos) - { + public boolean canSurvive(BlockState state, LevelReader reader, BlockPos pos) { return false || true; } @@ -67,12 +67,12 @@ public boolean canSurvive(BlockState state, LevelReader reader, BlockPos pos) } @Override - public VoxelShape getVisualShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + public @NotNull VoxelShape getVisualShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { return SEAT_BOUNDING_BOX; } @Override - public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + public @NotNull VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { if (context instanceof EntityCollisionContext entityCollisionContext) { if (entityCollisionContext.getEntity() != null && entityCollisionContext.getEntity().getVehicle() instanceof SeatEntity) { return EMPTY_BOX; @@ -82,12 +82,10 @@ public VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPo } @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) - { + public @NotNull InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { //DebugLog.log(DeviceEntities.SEAT.get().create(level).toString()); DebugLog.log("OKOKJRTKFD"); - if(!level.isClientSide) - { + if (!level.isClientSide) { SeatUtil.createSeatAndSit(level, pos, player, -1); } return InteractionResult.SUCCESS; @@ -95,25 +93,26 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player @Nullable @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) - { + public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { return new OfficeChairBlockEntity(pos, state); } @Override - protected void createBlockStateDefinition(StateDefinition.@NotNull Builder pBuilder) - { + protected void createBlockStateDefinition(StateDefinition.@NotNull Builder pBuilder) { super.createBlockStateDefinition(pBuilder); pBuilder.add(TYPE); } - public enum Type implements StringRepresentable - { + @Override + protected @NotNull MapCodec codec() { + return CODEC; + } + + public enum Type implements StringRepresentable { LEGS, SEAT, FULL; @Override - public String getSerializedName() - { + public @NotNull String getSerializedName() { return name().toLowerCase(); } } diff --git a/common/src/main/java/com/ultreon/devices/block/PaperBlock.java b/common/src/main/java/dev/ultreon/devices/block/PaperBlock.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/block/PaperBlock.java rename to common/src/main/java/dev/ultreon/devices/block/PaperBlock.java index 6faf19387..d2a53f674 100644 --- a/common/src/main/java/com/ultreon/devices/block/PaperBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/PaperBlock.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.block.entity.PaperBlockEntity; +import com.mojang.serialization.MapCodec; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.block.entity.PaperBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -18,29 +18,30 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; @SuppressWarnings("NullableProblems") public class PaperBlock extends HorizontalDirectionalBlock implements EntityBlock { + public static final MapCodec CODEC = simpleCodec(PaperBlock::new); + private static final VoxelShape SELECTION_BOUNDS = box(15, 0, 0, 16, 16, 16); - private static final VoxelShape SELECTION_BOX_NORTH = box(15, 0, 0, 16, 16, 16); - private static final VoxelShape SELECTION_BOX_SOUTH = box(0, 0, 0, 1, 16, 16); - private static final VoxelShape SELECTION_BOX_WEST = box(0, 0, 15, 16, 16, 16); - private static final VoxelShape SELECTION_BOX_EAST = box(0, 0, 0, 16, 16, 1); + private static final VoxelShape SELECTION_BOX_NORTH = box(0, 0, 0, 16, 16, 1); + private static final VoxelShape SELECTION_BOX_SOUTH = box(0, 0, 15, 16, 16, 16); + private static final VoxelShape SELECTION_BOX_EAST = box(15, 0, 0, 16, 16, 16); + private static final VoxelShape SELECTION_BOX_WEST = box(0, 0, 0, 1, 16, 16); private static final VoxelShape[] SELECTION_BOUNDING_BOX = {SELECTION_BOX_SOUTH, SELECTION_BOX_WEST, SELECTION_BOX_NORTH, SELECTION_BOX_EAST}; - public PaperBlock() { - super(Properties.of().noCollission().instabreak().noOcclusion().noLootTable()); + public PaperBlock(Properties properties) { + super(properties); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); } @@ -51,8 +52,8 @@ public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, return switch (pState.getValue(FACING)) { case NORTH -> SELECTION_BOX_NORTH; case SOUTH -> SELECTION_BOX_SOUTH; - case WEST -> SELECTION_BOX_WEST; case EAST -> SELECTION_BOX_EAST; + case WEST -> SELECTION_BOX_WEST; default -> throw new IllegalStateException("Unexpected value: " + pState.getValue(FACING)); }; } @@ -77,19 +78,14 @@ public InteractionResult use(BlockState pState, Level level, BlockPos pPos, Play @Override public List getDrops(BlockState pState, LootParams.Builder pBuilder) { - return new ArrayList<>(); - } + BlockEntity blockEntity = pBuilder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (!level.isClientSide) { - BlockEntity tileEntity = level.getBlockEntity(pos); - if (tileEntity instanceof PaperBlockEntity paper) { - ItemStack drop = IPrint.generateItem(paper.getPrint()); - level.addFreshEntity(new ItemEntity(level, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, drop)); - } + if (blockEntity instanceof PaperBlockEntity paper) { + ItemStack drop = IPrint.generateItem(paper.getPrint()); + return List.of(drop); } - super.onRemove(state, level, pos, newState, isMoving); + + return super.getDrops(pState, pBuilder); } @Override @@ -113,4 +109,9 @@ protected void createBlockStateDefinition(StateDefinition.Builder codec() { + return CODEC; + } } diff --git a/common/src/main/java/com/ultreon/devices/block/PrinterBlock.java b/common/src/main/java/dev/ultreon/devices/block/PrinterBlock.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/block/PrinterBlock.java rename to common/src/main/java/dev/ultreon/devices/block/PrinterBlock.java index 9ecf0cf4c..6b4ef471d 100644 --- a/common/src/main/java/com/ultreon/devices/block/PrinterBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/PrinterBlock.java @@ -1,8 +1,10 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.block.entity.PrinterBlockEntity; -import com.ultreon.devices.util.Colored; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.block.entity.PrinterBlockEntity; +import dev.ultreon.devices.util.Colored; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; @@ -12,6 +14,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -27,6 +30,11 @@ * @author MrCrayfish */ public class PrinterBlock extends DeviceBlock.Colored implements Colored { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + DyeColor.CODEC.fieldOf("color").forGetter(PrinterBlock::getColor), + propertiesCodec() + ).apply(instance, PrinterBlock::new)); + private static final VoxelShape SHAPE_NORTH = Shapes.or( box(2, 0, 7, 14, 5, 12), box(3.5, 0.1, 1, 12.5, 1.1, 7), @@ -76,7 +84,7 @@ public class PrinterBlock extends DeviceBlock.Colored implements Colored { box(5, 3, 1, 7, 5, 15), box(12, 3, 4, 16, 9.3, 12)); - public PrinterBlock(DyeColor color) { + public PrinterBlock(DyeColor color, Properties properties) { super(Properties.of().mapColor(color).strength(6f).sound(SoundType.METAL), color, ModDeviceTypes.PRINTER); this.registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); } @@ -104,10 +112,11 @@ public InteractionResult use(@NotNull BlockState state, Level level, @NotNull Bl return super.use(state, level, pos, player, hand, hit); } } + ItemStack heldItem = player.getItemInHand(hand); BlockEntity tileEntity = level.getChunkAt(pos).getBlockEntity(pos, LevelChunk.EntityCreationType.IMMEDIATE); - if (tileEntity instanceof PrinterBlockEntity) { - return ((PrinterBlockEntity) tileEntity).addPaper(heldItem, player.isCrouching()) ? InteractionResult.SUCCESS : InteractionResult.FAIL; + if (tileEntity instanceof PrinterBlockEntity printer) { + return printer.addPaper(heldItem, player.isCrouching()) ? InteractionResult.SUCCESS : InteractionResult.FAIL; } return InteractionResult.PASS; } @@ -116,4 +125,9 @@ public InteractionResult use(@NotNull BlockState state, Level level, @NotNull Bl public @Nullable BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { return new PrinterBlockEntity(pos, state); } + + @Override + protected @NotNull MapCodec codec() { + return CODEC; + } } diff --git a/common/src/main/java/com/ultreon/devices/block/RouterBlock.java b/common/src/main/java/dev/ultreon/devices/block/RouterBlock.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/block/RouterBlock.java rename to common/src/main/java/dev/ultreon/devices/block/RouterBlock.java index 74ddbcbd0..70ff5cc9c 100644 --- a/common/src/main/java/com/ultreon/devices/block/RouterBlock.java +++ b/common/src/main/java/dev/ultreon/devices/block/RouterBlock.java @@ -1,9 +1,11 @@ -package com.ultreon.devices.block; +package dev.ultreon.devices.block; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.block.entity.RouterBlockEntity; -import com.ultreon.devices.network.PacketHandler; -import com.ultreon.devices.network.task.SyncBlockPacket; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.block.entity.RouterBlockEntity; +import dev.ultreon.devices.network.PacketHandler; +import dev.ultreon.devices.network.task.SyncBlockPacket; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; @@ -14,7 +16,7 @@ import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; @@ -24,11 +26,17 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author MrCrayfish */ public class RouterBlock extends DeviceBlock.Colored { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + DyeColor.CODEC.fieldOf("color").forGetter(RouterBlock::getColor), + propertiesCodec() + ).apply(instance, RouterBlock::new)); + public static final BooleanProperty VERTICAL = BooleanProperty.create("vertical"); // Todo - do rotations for voxel shapes properly. @@ -57,8 +65,8 @@ public class RouterBlock extends DeviceBlock.Colored { box(13, 0, 1, 16, 10, 15) }; - public RouterBlock(DyeColor color) { - super(Properties.of().mapColor(color).strength(6f).sound(SoundType.METAL), color, ModDeviceTypes.ROUTER); + public RouterBlock(DyeColor color, Properties properties) { + super(properties, color, ModDeviceTypes.ROUTER); this.registerDefaultState(this.getStateDefinition().any().setValue(FACING, Direction.NORTH).setValue(VERTICAL, false)); } @@ -74,7 +82,7 @@ public RouterBlock(DyeColor color) { } @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + public @NotNull InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if (level.isClientSide && player.isCreative()) { BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof RouterBlockEntity router) { @@ -89,22 +97,11 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player } @Override - public @org.jetbrains.annotations.Nullable BlockState getStateForPlacement(@NotNull BlockPlaceContext pContext) { + public @Nullable BlockState getStateForPlacement(@NotNull BlockPlaceContext pContext) { BlockState state = super.getStateForPlacement(pContext); return state != null ? state.setValue(FACING, pContext.getHorizontalDirection().getOpposite()).setValue(VERTICAL, pContext.getClickLocation().y - pContext.getClickLocation().y > 0.5) : null; } -// @Override -// public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { -// IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand); -// return state.withProperty(VERTICAL, facing.getHorizontalIndex() != -1); -// } - -// @Override -// public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) { -// return side != EnumFacing.DOWN; -// } - @NotNull @Override @Contract("_, _ -> new") @@ -117,4 +114,9 @@ protected void createBlockStateDefinition(StateDefinition.@NotNull Builder codec() { + return CODEC; + } } diff --git a/common/src/main/java/com/ultreon/devices/block/entity/ComputerBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/ComputerBlockEntity.java similarity index 55% rename from common/src/main/java/com/ultreon/devices/block/entity/ComputerBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/ComputerBlockEntity.java index fe0cf12d3..79a7889bf 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/ComputerBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/ComputerBlockEntity.java @@ -1,38 +1,33 @@ -package com.ultreon.devices.block.entity; - -import com.ultreon.devices.block.LaptopBlock; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.util.BlockEntityUtil; +package dev.ultreon.devices.block.entity; + +import com.google.common.collect.Lists; +import dev.ultreon.devices.OperatingSystems; +import dev.ultreon.devices.core.BiosImpl; +import dev.ultreon.devices.core.BootLoader; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.util.BlockEntityUtil; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; -import net.minecraft.world.entity.Entity; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.gameevent.GameEvent; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public abstract class ComputerBlockEntity extends NetworkDeviceBlockEntity.Colored { - private static final int OPENED_ANGLE = 102; - private boolean open = false; +import java.util.List; +public abstract class ComputerBlockEntity extends NetworkDeviceBlockEntity.Colored { + private final List> bootLoaders = Lists.newArrayList(OperatingSystems.MINE_OS.get()); private CompoundTag applicationData = new CompoundTag(); private CompoundTag systemData = new CompoundTag(); private FileSystem fileSystem; - @Environment(EnvType.CLIENT) - private int rotation; - - @Environment(EnvType.CLIENT) - private int prevRotation; - private DyeColor externalDriveColor; + private boolean poweredOn; + private CompoundTag originalData; + private BiosImpl bios; protected ComputerBlockEntity(BlockEntityType type, BlockPos pWorldPosition, BlockState pBlockState) { super(type, pWorldPosition, pBlockState); @@ -40,49 +35,19 @@ protected ComputerBlockEntity(BlockEntityType typ @Override public String getDeviceName() { - return "Laptop"; - } - - @Override - public void tick() { - super.tick(); - Level level = this.level; - if (level == null) return; - - if (getBlockState().getValue(LaptopBlock.OPEN) != open) { - level.setBlock(getBlockPos(), this.getBlockState().setValue(LaptopBlock.OPEN, open), 2); - } - - if (level.isClientSide) { - prevRotation = rotation; - if (!open) { - if (rotation > 0) { - rotation -= 10; - } - } else { - if (rotation < OPENED_ANGLE) { - rotation += 10; - } - } - } + return "MineOS"; } @Override public void load(@NotNull CompoundTag compound) { super.load(compound); - if (compound.contains("open")) { - this.open = compound.getBoolean("open"); - Level level = getLevel(); - if (level != null) { - level.setBlock(getBlockPos(), this.getBlockState().setValue(LaptopBlock.OPEN, open), 2); - } - } - if (compound.contains("system_data", Tag.TAG_COMPOUND)) { - this.systemData = compound.getCompound("system_data"); - } - if (compound.contains("application_data", Tag.TAG_COMPOUND)) { - this.applicationData = compound.getCompound("application_data"); + + if (compound.contains("original_data")) { + this.originalData = compound.getCompound("original_data"); + } else { + this.originalData = compound.copy(); } + if (compound.contains("file_system")) { this.fileSystem = new FileSystem(this, compound.getCompound("file_system")); } @@ -97,7 +62,10 @@ public void load(@NotNull CompoundTag compound) { @Override public void saveAdditional(@NotNull CompoundTag compound) { super.saveAdditional(compound); - compound.putBoolean("open", open); + + if (originalData != null) { + compound.put("original_data", originalData); + } if (systemData != null) { compound.put("system_data", systemData); @@ -115,7 +83,6 @@ public void saveAdditional(@NotNull CompoundTag compound) { @Override public CompoundTag saveSyncTag() { CompoundTag tag = super.saveSyncTag(); - tag.putBoolean("open", open); tag.put("system_data", getSystemData()); if (getFileSystem().getAttachedDrive() != null) { @@ -137,34 +104,6 @@ public CompoundTag saveSyncTag() { // return INFINITE_EXTENT_AABB; // } - public void openClose(@Nullable Entity entity) { - Level level = this.level; - if (level != null) { - level.gameEvent(!open ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, getBlockPos(), GameEvent.Context.of(entity, this.getBlockState())); - } - boolean oldOpen = open; - open = !getBlockState().getValue(LaptopBlock.OPEN); - if (oldOpen != open) { - pipeline.putBoolean("open", open); - var d = getBlockState().setValue(LaptopBlock.OPEN, open); - this.level.setBlock(this.getBlockPos(), d, 18); - sync(); - } - - if (level != null) { - markUpdated(); - doNeighborUpdates(level, this.getBlockPos(), this.getBlockState()); - } - } - - private static void doNeighborUpdates(Level level, BlockPos pos, BlockState state) { - state.updateNeighbourShapes(level, pos, 3); - } - - public boolean isOpen() { - return open; - } - public CompoundTag getApplicationData() { return applicationData != null ? applicationData : new CompoundTag(); } @@ -197,11 +136,6 @@ public void setApplicationData(String appId, CompoundTag applicationData) { BlockEntityUtil.markBlockForUpdate(level, worldPosition); } - @Environment(EnvType.CLIENT) - public float getScreenAngle(float partialTicks) { - return -OPENED_ANGLE * ((prevRotation + (rotation - prevRotation) * partialTicks) / OPENED_ANGLE); - } - @Environment(EnvType.CLIENT) public boolean isExternalDriveAttached() { return externalDriveColor != null; @@ -211,4 +145,30 @@ public boolean isExternalDriveAttached() { public DyeColor getExternalDriveColor() { return externalDriveColor; } + + public boolean isPoweredOn() { + return this.poweredOn; + } + + public void powerOn() { + this.poweredOn = true; + setChanged(); + assert level != null; + BlockEntityUtil.markBlockForUpdate(level, worldPosition); + + bios = new BiosImpl(this, this.bootLoaders); + try { + bios.powerOn(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private List> getBootLoaders() { + return bootLoaders; + } + + public BiosImpl getBios() { + return bios; + } } diff --git a/common/src/main/java/com/ultreon/devices/block/entity/DeviceBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/DeviceBlockEntity.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/block/entity/DeviceBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/DeviceBlockEntity.java index f663219a6..374b219b1 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/DeviceBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/DeviceBlockEntity.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.block.DeviceBlock; -import com.ultreon.devices.util.Colorable; -import com.ultreon.devices.util.Tickable; +import dev.ultreon.devices.block.DeviceBlock; +import dev.ultreon.devices.util.Colorable; +import dev.ultreon.devices.util.Tickable; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -130,10 +130,12 @@ public CompoundTag saveSyncTag() { return tag; } + @Override public DyeColor getColor() { return color; } + @Override public void setColor(DyeColor color) { this.color = color; } diff --git a/common/src/main/java/dev/ultreon/devices/block/entity/LaptopBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/LaptopBlockEntity.java new file mode 100644 index 000000000..5fe5123ea --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/block/entity/LaptopBlockEntity.java @@ -0,0 +1,132 @@ +package dev.ultreon.devices.block.entity; + +import dev.ultreon.devices.block.LaptopBlock; +import dev.ultreon.devices.init.DeviceBlockEntities; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class LaptopBlockEntity extends ComputerBlockEntity { + private static final int OPENED_ANGLE = 102; + + private boolean open = false; + + @Environment(EnvType.CLIENT) + private int rotation; + + @Environment(EnvType.CLIENT) + private int prevRotation; + + private int attachmentCooldown; + + public LaptopBlockEntity(BlockPos pWorldPosition, BlockState pBlockState) { + super(DeviceBlockEntities.LAPTOP.get(), pWorldPosition, pBlockState); + } + + @Override + public void tick() { + super.tick(); + + if (getBlockState().getValue(LaptopBlock.OPEN) != open) { + if (level != null) { + level.setBlock(getBlockPos(), this.getBlockState().setValue(LaptopBlock.OPEN, open), 2); + } + } + + if (level != null && level.isClientSide) { + prevRotation = rotation; + if (!open) { + if (rotation > 0) { + rotation -= 10; + } + } else { + if (rotation < OPENED_ANGLE) { + rotation += 10; + } + } + } + + if (attachmentCooldown > 0) { + attachmentCooldown--; + } + } + + @Override + public void load(@NotNull CompoundTag compound) { + if (compound.contains("open")) { + this.open = compound.getBoolean("open"); + Level level = getLevel(); + if (level != null) { + if (level.isClientSide) { + if (open) this.powerOn(); + } + level.setBlock(getBlockPos(), this.getBlockState().setValue(LaptopBlock.OPEN, open), 2); + } + } + + super.load(compound); + } + + @Override + public void saveAdditional(@NotNull CompoundTag compound) { + compound.putBoolean("open", open); + + super.saveAdditional(compound); + } + + @Override + public CompoundTag saveSyncTag() { + CompoundTag tag = super.saveSyncTag(); + tag.putBoolean("open", open); + + return tag; + } + + public void openClose(@Nullable Entity entity) { + Level level = this.level; + if (level != null) { + level.gameEvent(!open ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, getBlockPos(), GameEvent.Context.of(entity, this.getBlockState())); + } + boolean oldOpen = open; + open = !getBlockState().getValue(LaptopBlock.OPEN); + if (oldOpen != open) { + pipeline.putBoolean("open", open); + var d = getBlockState().setValue(LaptopBlock.OPEN, open); + this.level.setBlock(this.getBlockPos(), d, 18); + sync(); + } + + if (level != null) { + markUpdated(); + doNeighborUpdates(level, this.getBlockPos(), this.getBlockState()); + } + } + + private static void doNeighborUpdates(Level level, BlockPos pos, BlockState state) { + state.updateNeighbourShapes(level, pos, 3); + } + + public boolean isOpen() { + return open; + } + + @Environment(EnvType.CLIENT) + public float getScreenAngle(float partialTicks) { + return -OPENED_ANGLE * ((prevRotation + (rotation - prevRotation) * partialTicks) / OPENED_ANGLE); + } + + public void setAttachmentCooldown(int ticks) { + this.attachmentCooldown = Math.max(ticks, 0); + } + + public boolean canChangeAttachment() { + return this.attachmentCooldown <= 0; + } +} diff --git a/common/src/main/java/com/ultreon/devices/block/entity/MacMaxXBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/MacMaxXBlockEntity.java similarity index 77% rename from common/src/main/java/com/ultreon/devices/block/entity/MacMaxXBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/MacMaxXBlockEntity.java index ef113a926..3226acdb6 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/MacMaxXBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/MacMaxXBlockEntity.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.init.DeviceBlockEntities; +import dev.ultreon.devices.init.DeviceBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; diff --git a/common/src/main/java/com/ultreon/devices/block/entity/NetworkDeviceBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/NetworkDeviceBlockEntity.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/block/entity/NetworkDeviceBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/NetworkDeviceBlockEntity.java index 98dc77896..54c39776a 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/NetworkDeviceBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/NetworkDeviceBlockEntity.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.core.network.Connection; -import com.ultreon.devices.core.network.Router; -import com.ultreon.devices.util.Colorable; -import com.ultreon.devices.util.Tickable; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.core.network.Connection; +import dev.ultreon.devices.core.network.Router; +import dev.ultreon.devices.util.Colorable; +import dev.ultreon.devices.util.Tickable; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -26,6 +26,7 @@ public NetworkDeviceBlockEntity(BlockEntityType pType, BlockPos pWorldPositio super(pType, pWorldPosition, pBlockState); } + @Override public void tick() { assert level != null; if (level.isClientSide) diff --git a/common/src/main/java/com/ultreon/devices/block/entity/OfficeChairBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/OfficeChairBlockEntity.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/block/entity/OfficeChairBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/OfficeChairBlockEntity.java index 74ade9bef..c53e53ae8 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/OfficeChairBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/OfficeChairBlockEntity.java @@ -1,18 +1,16 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.block.LaptopBlock; -import com.ultreon.devices.entity.SeatEntity; -import com.ultreon.devices.init.DeviceBlockEntities; -import com.ultreon.devices.util.Colorable; +import dev.ultreon.devices.block.LaptopBlock; +import dev.ultreon.devices.entity.SeatEntity; +import dev.ultreon.devices.init.DeviceBlockEntities; +import dev.ultreon.devices.util.Colorable; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.vehicle.Boat; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; diff --git a/common/src/main/java/com/ultreon/devices/block/entity/PaperBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/PaperBlockEntity.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/block/entity/PaperBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/PaperBlockEntity.java index ba8e7855c..42d65e5b2 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/PaperBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/PaperBlockEntity.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.init.DeviceBlockEntities; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.init.DeviceBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -9,7 +9,6 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.state.BlockState; - import org.jetbrains.annotations.Nullable; /** diff --git a/common/src/main/java/com/ultreon/devices/block/entity/PrinterBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/PrinterBlockEntity.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/block/entity/PrinterBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/PrinterBlockEntity.java index cfed0e665..d6a7b3733 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/PrinterBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/PrinterBlockEntity.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.init.DeviceBlockEntities; -import com.ultreon.devices.init.DeviceSounds; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.init.DeviceBlockEntities; +import dev.ultreon.devices.init.DeviceSounds; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -20,7 +20,7 @@ import java.util.ArrayDeque; import java.util.Deque; -import static com.ultreon.devices.block.entity.PrinterBlockEntity.State.*; +import static dev.ultreon.devices.block.entity.PrinterBlockEntity.State.*; /** * @author MrCrayfish @@ -130,6 +130,10 @@ public CompoundTag saveSyncTag() { return tag; } + public State getState() { + return state; + } + public void setState(State newState) { if (newState == null) return; diff --git a/common/src/main/java/com/ultreon/devices/block/entity/RouterBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/RouterBlockEntity.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/block/entity/RouterBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/RouterBlockEntity.java index 9f0d00624..a8f4b5cd6 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/RouterBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/RouterBlockEntity.java @@ -1,13 +1,14 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.core.network.Router; -import com.ultreon.devices.init.DeviceBlockEntities; +import dev.ultreon.devices.core.network.Router; +import dev.ultreon.devices.init.DeviceBlockEntities; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; @SuppressWarnings("unused") public class RouterBlockEntity extends DeviceBlockEntity.Colored { @@ -28,6 +29,7 @@ public Router getRouter() { return router; } + @Override public void tick() { assert level != null; if (!level.isClientSide) { @@ -51,12 +53,13 @@ public void setDebug(boolean debug) { } } + @Override public String getDeviceName() { return "Router"; } @Override - public void saveAdditional(CompoundTag tag) { + public void saveAdditional(@NotNull CompoundTag tag) { super.saveAdditional(tag); if (tag.contains("router", Tag.TAG_COMPOUND)) { router = Router.fromTag(worldPosition, tag.getCompound("router")); diff --git a/common/src/main/java/com/ultreon/devices/block/entity/SyncBlockEntity.java b/common/src/main/java/dev/ultreon/devices/block/entity/SyncBlockEntity.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/block/entity/SyncBlockEntity.java rename to common/src/main/java/dev/ultreon/devices/block/entity/SyncBlockEntity.java index e08ea6d8c..113b6d371 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/SyncBlockEntity.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/SyncBlockEntity.java @@ -1,19 +1,18 @@ -package com.ultreon.devices.block.entity; +package dev.ultreon.devices.block.entity; -import com.ultreon.devices.annotations.PlatformOverride; -import com.ultreon.devices.util.BlockEntityUtil; import dev.architectury.injectables.annotations.PlatformOnly; +import dev.ultreon.devices.annotations.PlatformOverride; +import dev.ultreon.devices.util.BlockEntityUtil; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.Connection; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.world.item.DebugStickItem; -import net.minecraft.world.level.block.DoorBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Objects; @@ -43,7 +42,7 @@ public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) { } @Override - public CompoundTag getUpdateTag() { + public @NotNull CompoundTag getUpdateTag() { if (!pipeline.isEmpty()) { CompoundTag updateTag = pipeline; saveAdditional(updateTag); diff --git a/common/src/main/java/com/ultreon/devices/block/entity/renderer/LaptopRenderer.java b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/LaptopRenderer.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/block/entity/renderer/LaptopRenderer.java rename to common/src/main/java/dev/ultreon/devices/block/entity/renderer/LaptopRenderer.java index 09d09b5c6..bb677a6a1 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/renderer/LaptopRenderer.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/LaptopRenderer.java @@ -1,19 +1,18 @@ -package com.ultreon.devices.block.entity.renderer; +package dev.ultreon.devices.block.entity.renderer; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import com.ultreon.devices.block.ComputerBlock; -import com.ultreon.devices.block.LaptopBlock; -import com.ultreon.devices.block.entity.LaptopBlockEntity; -import com.ultreon.devices.init.DeviceItems; +import dev.ultreon.devices.block.ComputerBlock; +import dev.ultreon.devices.block.LaptopBlock; +import dev.ultreon.devices.block.entity.LaptopBlockEntity; +import dev.ultreon.devices.init.DeviceItems; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.inventory.InventoryMenu; diff --git a/common/src/main/java/com/ultreon/devices/block/entity/renderer/OfficeChairRenderer.java b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/OfficeChairRenderer.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/block/entity/renderer/OfficeChairRenderer.java rename to common/src/main/java/dev/ultreon/devices/block/entity/renderer/OfficeChairRenderer.java index a712bdcb9..f9979bd58 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/renderer/OfficeChairRenderer.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/OfficeChairRenderer.java @@ -1,13 +1,11 @@ -package com.ultreon.devices.block.entity.renderer; +package dev.ultreon.devices.block.entity.renderer; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import com.ultreon.devices.block.OfficeChairBlock; -import com.ultreon.devices.block.entity.OfficeChairBlockEntity; -import com.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.block.OfficeChairBlock; +import dev.ultreon.devices.block.entity.OfficeChairBlockEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.BlockRenderDispatcher; diff --git a/common/src/main/java/com/ultreon/devices/block/entity/renderer/PaperRenderer.java b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/PaperRenderer.java similarity index 51% rename from common/src/main/java/com/ultreon/devices/block/entity/renderer/PaperRenderer.java rename to common/src/main/java/dev/ultreon/devices/block/entity/renderer/PaperRenderer.java index 22f93e2dc..2efcbf5b3 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/renderer/PaperRenderer.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/PaperRenderer.java @@ -1,20 +1,18 @@ -package com.ultreon.devices.block.entity.renderer; +package dev.ultreon.devices.block.entity.renderer; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.api.print.PrintingManager; -import com.ultreon.devices.block.PaperBlock; -import com.ultreon.devices.block.entity.PaperBlockEntity; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.print.PrintingManager; +import dev.ultreon.devices.block.PaperBlock; +import dev.ultreon.devices.block.entity.PaperBlockEntity; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.MapRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.client.renderer.entity.ItemFrameRenderer; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -24,15 +22,20 @@ import org.jetbrains.annotations.NotNull; import org.joml.Matrix4f; import org.joml.Quaternionf; +import org.joml.Vector3f; import java.awt.*; import java.util.Objects; +import static net.minecraft.client.renderer.texture.OverlayTexture.NO_OVERLAY; + /** * @author MrCrayfish */ public record PaperRenderer( BlockEntityRendererProvider.Context context) implements BlockEntityRenderer { + private static long TextureIndex = 0; + @SuppressWarnings("SameParameterValue") private static void drawCuboid(double x, double y, double z, double width, double height, double depth, MultiBufferSource bufferSource) { @@ -59,80 +62,125 @@ private static void drawQuad(double xFrom, double yFrom, double zFrom, double xT double textureWidth = Math.abs(xTo - xFrom); double textureHeight = Math.abs(yTo - yFrom); double textureDepth = Math.abs(zTo - zFrom); - VertexConsumer buffer = bufferSource.getBuffer(RenderType.solid()); + BufferBuilder buffer = new BufferBuilder(256); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + switch (direction.getAxis()) { + case X -> { + buffer.vertex(xFrom, yFrom, zFrom).uv((float) (1 - xFrom + textureDepth), (float) (1 - yFrom + textureHeight)).endVertex(); + buffer.vertex(xFrom, yTo, zFrom).uv((float) (1 - xFrom + textureDepth), (float) (1 - yFrom)).endVertex(); + buffer.vertex(xTo, yTo, zTo).uv((float) (1 - xFrom), (float) (1 - yFrom)).endVertex(); + buffer.vertex(xTo, yFrom, zTo).uv((float) (1 - xFrom), (float) (1 - yFrom + textureHeight)).endVertex(); + } + case Y -> { + buffer.vertex(xFrom, yFrom, zFrom).uv((float) (1 - xFrom + textureWidth), (float) (1 - yFrom + textureDepth)).endVertex(); + buffer.vertex(xFrom, yFrom, zTo).uv((float) (1 - xFrom + textureWidth), (float) (1 - yFrom)).endVertex(); + buffer.vertex(xTo, yFrom, zTo).uv((float) (1 - xFrom), (float) (1 - yFrom)).endVertex(); + buffer.vertex(xTo, yFrom, zFrom).uv((float) (1 - xFrom), (float) (1 - yFrom + textureDepth)).endVertex(); + } + case Z -> { + buffer.vertex(xFrom, yFrom, zFrom).uv((float) (1 - xFrom + textureWidth), (float) (1 - yFrom + textureHeight)).endVertex(); + buffer.vertex(xFrom, yTo, zFrom).uv((float) (1 - xFrom + textureWidth), (float) (1 - yFrom)).endVertex(); + buffer.vertex(xTo, yTo, zTo).uv((float) (1 - xFrom), (float) (1 - yFrom)).endVertex(); + buffer.vertex(xTo, yFrom, zTo).uv((float) (1 - xFrom), (float) (1 - yFrom + textureHeight)).endVertex(); + } + } } - private static long AA = 0; - private static void drawPixels(PoseStack poseStack, int[] pixels, int resolution, boolean cut, int packedLight, MultiBufferSource bufferSource) { - double scale = 16 / (double) resolution; + private static void drawPixels(PoseStack poseStack, int[] pixels, int resolution, boolean cut, int packedLight, int packedOverlay, MultiBufferSource bufferSource) { var d = new DynamicTexture(resolution, resolution, true); for (int i = 0; i < resolution; i++) { for (int j = 0; j < resolution; j++) { - int r = (pixels[j + i * resolution] >> 16 & 255); int g = (pixels[j + i * resolution] >> 8 & 255); int b = (pixels[j + i * resolution] & 255); - int a = (int) Math.floor((pixels[j + i * resolution] >> 24 & 255)); + int a = (int) (double) (pixels[j + i * resolution] >> 24 & 255); + assert d.getPixels() != null; d.getPixels().setPixelRGBA(i, j, new Color(r, g, b, a).getRGB()); } } - ResourceLocation resourcelocation = Minecraft.getInstance().getTextureManager().register("map/" + AA, d); + + ResourceLocation resourcelocation = Minecraft.getInstance().getTextureManager().register("map/" + TextureIndex, d); Matrix4f matrix4f = poseStack.last().pose(); - var vertexconsumer = bufferSource.getBuffer(RenderType.text(resourcelocation)); - vertexconsumer.vertex(matrix4f, 0.0f, 128.0f, -0.01f).color(255, 255, 255, 255).uv(0.0f, 1.0f).uv2(packedLight).endVertex(); - vertexconsumer.vertex(matrix4f, 128.0f, 128.0f, -0.01f).color(255, 255, 255, 255).uv(1.0f, 1.0f).uv2(packedLight).endVertex(); - vertexconsumer.vertex(matrix4f, 128.0f, 0.0f, -0.01f).color(255, 255, 255, 255).uv(1.0f, 0.0f).uv2(packedLight).endVertex(); - vertexconsumer.vertex(matrix4f, 0.0f, 0.0f, -0.01f).color(255, 255, 255, 255).uv(0.0f, 0.0f).uv2(packedLight).endVertex(); - AA++; + var vertexconsumer = bufferSource.getBuffer(RenderType.entitySolid(resourcelocation)); + vertexconsumer.vertex(matrix4f, 0.0f, 128.0f, -0.01f).color(255, 255, 255, 255).uv(0.0f, 1.0f).uv2(packedLight).overlayCoords(packedOverlay).endVertex(); + vertexconsumer.vertex(matrix4f, 128.0f, 128.0f, -0.01f).color(255, 255, 255, 255).uv(1.0f, 1.0f).uv2(packedLight).overlayCoords(packedOverlay).endVertex(); + vertexconsumer.vertex(matrix4f, 128.0f, 0.0f, -0.01f).color(255, 255, 255, 255).uv(1.0f, 0.0f).uv2(packedLight).overlayCoords(packedOverlay).endVertex(); + vertexconsumer.vertex(matrix4f, 0.0f, 0.0f, -0.01f).color(255, 255, 255, 255).uv(0.0f, 0.0f).uv2(packedLight).overlayCoords(packedOverlay).endVertex(); + TextureIndex++; } @Override public void render(PaperBlockEntity blockEntity, float partialTick, @NotNull PoseStack pose, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { BlockState state = Objects.requireNonNull(blockEntity.getLevel()).getBlockState(blockEntity.getBlockPos()); if (blockEntity.getBlockState().getBlock() != state.getBlock()) { - Devices.LOGGER.error("Paper block mismatch: {} != {}", blockEntity.getBlockState().getBlock(), state.getBlock()); + UltreonDevicesMod.LOGGER.error("Paper block mismatch: {} != {}", blockEntity.getBlockState().getBlock(), state.getBlock()); return; } + //region pose.pushPose(); { - pose.translate(blockEntity.getBlockPos().getX(), blockEntity.getBlockPos().getY(), blockEntity.getBlockPos().getZ()); + + //region + pose.pushPose(); + Vector3f vector3f = new Vector3f(0.5f, 0f, 0.5f); + Quaternionf quat = (switch (state.getValue(PaperBlock.FACING)) { + case DOWN -> new Quaternionf().rotationX((float) Math.PI); + case UP -> new Quaternionf(); + case NORTH -> new Quaternionf().rotateXYZ(0, 0.0F, 0); + case SOUTH -> new Quaternionf().rotateXYZ(0, (float) (Math.PI), 0); + case WEST -> new Quaternionf().rotateXYZ(0, (float) (Math.PI / 2), 0); + case EAST -> new Quaternionf().rotateXYZ(0, (float) -(Math.PI / 2), 0); + }); + vector3f.set(-1, -1, -1).rotate(quat); pose.translate(0.5, 0.5, 0.5); - pose.mulPose(state.getValue(PaperBlock.FACING).getRotation()); - pose.mulPose(new Quaternionf(0, 0, 1, -blockEntity.getRotation())); + pose.mulPose(quat); pose.translate(-0.5, -0.5, -0.5); + float scale = 32768f; + pose.scale(1 / scale, 1 / scale, 1 / scale); + IPrint print = blockEntity.getPrint(); if (print != null) { CompoundTag data = print.toTag(); if (data.contains("pixels", Tag.TAG_INT_ARRAY) && data.contains("resolution", Tag.TAG_INT)) { RenderSystem.setShaderTexture(0, PrinterRenderer.PaperModel.TEXTURE); - if (DeviceConfig.RENDER_PRINTED_3D.get() && !data.getBoolean("cut")) { - // drawCuboid(0, 0, 0, 16, 16, 1, bufferSource); - } + + // TODO: Fix in either 0.9 or 0.10 +// if (DeviceConfig.RENDER_PRINTED_3D.get() && !data.getBoolean("cut")) { +// drawCuboid(0, 0, 0, 16, 16, 1, bufferSource); +// } pose.translate(0, 0, DeviceConfig.RENDER_PRINTED_3D.get() ? 0.0625 : 0.001); + //region pose.pushPose(); { IPrint.Renderer renderer = PrintingManager.getRenderer(print); - renderer.render(pose, data); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.entitySolid(PrinterRenderer.PaperModel.TEXTURE)); + renderer.render(pose, buffer, data, packedLight, NO_OVERLAY, blockEntity.getBlockState().getValue(PaperBlock.FACING)); } pose.popPose(); + //endregion + //region pose.pushPose(); { if (DeviceConfig.RENDER_PRINTED_3D.get() && data.getBoolean("cut")) { CompoundTag tag = print.toTag(); - drawPixels(pose, tag.getIntArray("pixels"), tag.getInt("resolution"), tag.getBoolean("cut"), packedLight, bufferSource); + drawPixels(pose, tag.getIntArray("pixels"), tag.getInt("resolution"), tag.getBoolean("cut"), packedLight, packedOverlay, bufferSource); } } pose.popPose(); + //endregion } } + pose.popPose(); + //endregion } pose.popPose(); + //endregion } } diff --git a/common/src/main/java/dev/ultreon/devices/block/entity/renderer/PrinterRenderer.java b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/PrinterRenderer.java new file mode 100644 index 000000000..6bfe0d7d6 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/PrinterRenderer.java @@ -0,0 +1,185 @@ +package dev.ultreon.devices.block.entity.renderer; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.print.PrintingManager; +import dev.ultreon.devices.block.PrinterBlock; +import dev.ultreon.devices.block.entity.PrinterBlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.model.Model; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; +import org.joml.Quaternionf; + +import java.awt.*; +import java.util.Objects; + +/** + * @author MrCrayfish + */ +public record PrinterRenderer(BlockEntityRendererProvider.Context context) implements BlockEntityRenderer { + private static final Quaternionf tmpQ = new Quaternionf(); + public static final float DEG2RAD = 0.017453292519943295f; + public static final double PIXEL_SIZE = 0.015625; + + @Override + public void render(PrinterBlockEntity blockEntity, float partialTick, @NotNull PoseStack pose, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + PaperModel paperModel = new PaperModel(Minecraft.getInstance().getEntityModels().bakeLayer(PaperModel.LAYER_LOCATION)); + + BlockState state = Objects.requireNonNull(blockEntity.getLevel()).getBlockState(blockEntity.getBlockPos()); + if (state.getBlock() != blockEntity.getBlock()) return; + + pose.pushPose(); + + // region + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + + if (blockEntity.hasPaper()) { + pose.pushPose(); + renderPaper(pose, bufferSource, packedLight, state, paperModel); + pose.popPose(); + } + + pose.pushPose(); + renderPrint(blockEntity, pose, state, bufferSource, packedLight, packedOverlay, paperModel); + pose.popPose(); + + pose.pushPose(); + renderDisplay(blockEntity, pose, bufferSource, state); + pose.popPose(); + // endregion + + pose.popPose(); + } + + private static void renderPaper(@NotNull PoseStack pose, @NotNull MultiBufferSource bufferSource, int packedLight, BlockState state, PaperModel paperModel) { + pose.translate(0.5, 0.5, 0.5); + pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); + pose.mulPose(new Quaternionf().rotateX(67.5f * DEG2RAD)); + pose.translate(0, 0, 0.4); + pose.translate(-13 * PIXEL_SIZE, -13 * PIXEL_SIZE, -1 * PIXEL_SIZE); + pose.scale(0.3f, 0.3f, 0.3f); + + drawBuffer(pose, bufferSource, packedLight, paperModel); + } + + private static void renderPrint(PrinterBlockEntity blockEntity, @NotNull PoseStack pose, BlockState state, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay, PaperModel paperModel) { + if (blockEntity.isLoading()) { + pose.translate(0.5, 0.5, 0.5); + pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); + pose.mulPose(tmpQ.identity().rotateX(67.5f * DEG2RAD)); + + double progress = Math.max(-0.4, -0.4 + (0.4 * ((double) (blockEntity.getRemainingPrintTime() - 10) / 20))); + pose.translate(0, -progress, 0.4); + pose.translate(-13 * PIXEL_SIZE, -13 * PIXEL_SIZE, -1 * PIXEL_SIZE); + pose.scale(0.3f, 0.3f, 0.3f); + + drawBuffer(pose, bufferSource, packedLight, paperModel); + } else if (blockEntity.isPrinting()) { + pose.translate(0.5, 0.078125, 0.5); + pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); + + double progress = -0.35 + (((double) (blockEntity.getRemainingPrintTime() - 20) / blockEntity.getTotalPrintTime())); + pose.translate(0, -progress, 0); + pose.translate(-13 * PIXEL_SIZE, -13 * PIXEL_SIZE, -0.5 * PIXEL_SIZE); + pose.scale(0.3f, 0.3f, 0.3f); + + drawBuffer(pose, bufferSource, packedLight, paperModel); + + pose.translate(0.4, 0.085, -0.001); + pose.mulPose(tmpQ.identity().rotateY(180f * DEG2RAD)); + + //region + IPrint print = blockEntity.getPrint(); + if (print != null) { + pose.pushPose(); + pose.translate(-15 * 0.0625, 15 * 0.03125, 0); + pose.scale(1 / 16384f, 1 / 16384f, 1 / 16384f); + pose.scale(1 / 1.5f, 1 / 1.5f, 1 / 1.5f); + + IPrint.Renderer renderer = PrintingManager.getRenderer(print); + VertexConsumer buffer = bufferSource.getBuffer(paperModel.renderType(PaperModel.TEXTURE)); + renderer.render(pose, buffer, print.toTag(), packedLight, packedOverlay, blockEntity.getBlockState().getValue(PrinterBlock.FACING)); + pose.popPose(); + } + //endregion + } + } + + private static void drawBuffer(@NotNull PoseStack pose, @NotNull MultiBufferSource bufferSource, int packedLight, PaperModel paperModel) { + VertexConsumer buffer = bufferSource.getBuffer(paperModel.renderType(PaperModel.TEXTURE)); + paperModel.renderToBuffer(pose, buffer, packedLight, OverlayTexture.NO_OVERLAY, 1f, 1f, 1f, 1f); + } + + private static void renderDisplay(PrinterBlockEntity blockEntity, @NotNull PoseStack pose, @NotNull MultiBufferSource bufferSource, BlockState state) { + RenderSystem.depthMask(false); + + // region + pose.translate(0.5, 0.5, 0.5); + pose.mulPose(state.getValue(PrinterBlock.FACING).getRotation()); + pose.mulPose(tmpQ.identity().rotateY(180f * DEG2RAD)); + pose.translate(0.0675, 0.005, -0.032); + pose.translate((8 -5.85) * 0.0625, (8 -5) * 0.0625, (-4.25) * 0.0625); + pose.pushPose(); + pose.scale(-0.010416667f, -0.010416667f, -0.010416667f); + pose.mulPose(tmpQ.identity().rotateX((90 + 22.5f) * DEG2RAD)); + // endregion + + Minecraft.getInstance().font.drawInBatch(Integer.toString(blockEntity.getPaperCount()), -Minecraft.getInstance().font.width(Integer.toString(blockEntity.getPaperCount())), -Minecraft.getInstance().font.lineHeight, Color.WHITE.getRGB(), false, pose.last().pose(), bufferSource, Font.DisplayMode.NORMAL, 0x00000000, 15728880); + pose.popPose(); + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + RenderSystem.depthMask(true); + } + + public static class PaperModel extends Model { + public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.MOD_ID, "textures/model/paper.png"); + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(UltreonDevicesMod.id("paper_model"), "main"); + private final ModelPart root; + private final ModelPart main; + + public PaperModel(ModelPart pRoot) { + super(RenderType::entitySolid); + this.root = pRoot; + this.main = pRoot.getChild("main"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + partdefinition.addOrReplaceChild("main", CubeListBuilder.create().texOffs(0, 0).addBox(0, 0, 0, 22, 30, 1), PartPose.offset(0f, 0f, 0f)); + return LayerDefinition.create(meshdefinition, 64, 32); + } + + @Override + public void renderToBuffer(@NotNull PoseStack pPoseStack, @NotNull VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, float pRed, float pGreen, float pBlue, float pAlpha) { + this.render(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); + } + + private void render(PoseStack pPoseStack, VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, float pRed, float pGreen, float pBlue, float pAlpha) { + RenderSystem.setShaderTexture(0, TEXTURE); + this.root.render(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); + } + + public ModelPart getMain() { + return main; + } + } +} diff --git a/common/src/main/java/com/ultreon/devices/block/entity/renderer/RouterRenderer.java b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/RouterRenderer.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/block/entity/renderer/RouterRenderer.java rename to common/src/main/java/dev/ultreon/devices/block/entity/renderer/RouterRenderer.java index 91a3ee22d..687f886f8 100644 --- a/common/src/main/java/com/ultreon/devices/block/entity/renderer/RouterRenderer.java +++ b/common/src/main/java/dev/ultreon/devices/block/entity/renderer/RouterRenderer.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.block.entity.renderer; +package dev.ultreon.devices.block.entity.renderer; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.ultreon.devices.block.PrinterBlock; -import com.ultreon.devices.block.RouterBlock; -import com.ultreon.devices.block.entity.RouterBlockEntity; -import com.ultreon.devices.core.network.NetworkDevice; -import com.ultreon.devices.core.network.Router; +import dev.ultreon.devices.block.PrinterBlock; +import dev.ultreon.devices.block.RouterBlock; +import dev.ultreon.devices.block.entity.RouterBlockEntity; +import dev.ultreon.devices.core.network.NetworkDevice; +import dev.ultreon.devices.core.network.Router; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; diff --git a/common/src/main/java/dev/ultreon/devices/client/Display.java b/common/src/main/java/dev/ultreon/devices/client/Display.java new file mode 100644 index 000000000..2be68cd70 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/client/Display.java @@ -0,0 +1,474 @@ +package dev.ultreon.devices.client; + +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.architectury.event.events.client.ClientLifecycleEvent; +import dev.architectury.event.events.common.LifecycleEvent; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.os.OperatingSystem; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.BiosImpl; +import dev.ultreon.devices.mineos.apps.system.DisplayResolution; +import dev.ultreon.devices.mineos.apps.system.PredefinedResolution; +import dev.ultreon.devices.util.GLHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +import java.util.function.Consumer; + +public class Display extends Screen { + public static final ResourceLocation LAPTOP_GUI = UltreonDevicesMod.res("textures/gui/laptop.png"); + public static final int BORDER = 10; + private static Display instance; + private final Window window; + private ComputerBlockEntity computer = null; + + private GuiGraphics graphics; + private int mouseX; + private int mouseY; + private float partialTicks; + private int screenWidth; + private int screenHeight; + private Consumer disconnectListener; + private Consumer connectListener; + private boolean connected; + private BiosImpl bios; + private OperatingSystem os; + + static { + LifecycleEvent.SERVER_STOPPING.register(instance1 -> { + close(); + }); + } + + private Display(DisplayResolution resolution) { + super(Component.literal("MineOS GuiGraphics")); + + this.screenWidth = resolution.width(); + this.screenHeight = resolution.height(); + + this.window = Minecraft.getInstance().getWindow(); + } + + private Display(ComputerBlockEntity computer) { + this(PredefinedResolution.PREDEFINED_384x216); + this.computer = computer; + this.bios = computer.getBios(); + this.os = this.bios.getRunningOS(); + } + + public static Screen open(ComputerBlockEntity computer) { + instance = new Display(computer); + instance.os.connectDisplay(instance); + return instance; + } + + public static void open(DisplayResolution resolution) { + instance = new Display(resolution); + } + + public static Display get() { + return instance; + } + + public static void close() { + if (instance == null) return; + + instance.onClose(); + instance.os.disconnectDisplay(); + instance = null; + } + + public static boolean isOpen() { + return instance != null; + } + + void begin(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + this.graphics = graphics; + this.mouseX = mouseX; + this.mouseY = mouseY; + this.partialTicks = partialTicks; + } + + void end() { + this.graphics = null; + this.mouseX = 0; + this.mouseY = 0; + this.partialTicks = 0; + } + + public void setResolution(DisplayResolution resolution) { + this.screenWidth = resolution.width(); + this.screenHeight = resolution.height(); + } + + public boolean isPresent() { + return true; + } + + public boolean isConnected() { + return this.connected; + } + + public int getScreenWidth() { + return screenWidth; + } + + public int getScreenHeight() { + return screenHeight; + } + + public int getMouseX() { + return mouseX; + } + + public int getMouseY() { + return mouseY; + } + + public float getPartialTicks() { + return partialTicks; + } + + public int getMaxWidth() { + return window.getGuiScaledWidth(); + } + + public int getMaxHeight() { + return window.getGuiScaledHeight(); + } + + @Override + public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { + this.begin(graphics, mouseX, mouseY, partialTick); + this.renderBezels(); + + int x = getX(); + int y = getY(); + graphics.pose().pushPose(); + + PoseStack.Pose last = graphics.pose().last(); + + try { + if (GLHelper.pushScissor(graphics, x, y, screenWidth, screenHeight)) { + OperatingSystem runningOS = this.bios.getRunningOS(); + if (mouseX < x || mouseX > x + screenWidth) { + mouseX = Integer.MAX_VALUE; + } + if (mouseY < y || mouseY > y + screenHeight) { + mouseY = Integer.MAX_VALUE; + } + + var posX = mouseX - getX(); + var posY = mouseY - getY(); + + if (runningOS != null) { + graphics.pose().translate(x, y, 0); + runningOS.getScreen().render(graphics, posX, posY, partialTick); + } + GLHelper.popScissor(); + } + } catch (Exception e) { + while (graphics.pose().last() != last) { + graphics.pose().popPose(); + } + + GLHelper.clearScissorStack(); + RenderSystem.disableScissor(); + + bios.onFault(e); + + return; + } + + if (graphics.pose().last() != last) { + UltreonDevicesMod.LOGGER.error("Pose stack leakage!"); + + do { + graphics.pose().popPose(); + } while (graphics.pose().last() != last); + + bios.onFault(new IllegalStateException("Pose stack leakage!")); + } + + if (GLHelper.clearScissorStack()) { + UltreonDevicesMod.LOGGER.error("Scissor stack leakage!"); + bios.onFault(new IllegalStateException("Scissor stack leakage!")); + } + RenderSystem.disableScissor(); + + graphics.pose().popPose(); + this.end(); + } + + @Override + public void tick() { + super.tick(); + + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().tick(); + } + } catch (Exception e) { + bios.onFault(e); + } + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + var posX = mouseX - getX(); + var posY = mouseY - getY(); + + if (posX < 0 || posY < 0 || posX >= screenWidth || posY >= screenHeight) + return false; + + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().mouseClicked(posX, posY, button); + } + } catch (Exception e) { + bios.onFault(e); + } + + return true; + } + + @Override + public boolean mouseReleased(double mouseX, double mouseY, int button) { + var posX = mouseX - getX(); + var posY = mouseY - getY(); + + if (posX < 0 || posY < 0 || posX >= screenWidth || posY >= screenHeight) + return false; + + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().mouseReleased(mouseX, mouseY, button); + } + } catch (Exception e) { + bios.onFault(e); + } + + return true; + } + + @Override + public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { + var posX = mouseX - getX(); + var posY = mouseY - getY(); + + if (posX < 0 || posY < 0 || posX >= screenWidth || posY >= screenHeight) + return false; + + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().mouseDragged(posX, posY, button, dragX, dragY); + } + } catch (Exception e) { + bios.onFault(e); + } + + return true; + } + + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double deltaX, double deltaY) { + var posX = mouseX - getX(); + var posY = mouseY - getY(); + + if (posX < 0 || posY < 0 || posX >= screenWidth || posY >= screenHeight) + return false; + + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().mouseScrolled(mouseX, mouseY, deltaX, deltaY); + } + } catch (Exception e) { + bios.onFault(e); + } + + return true; + } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if (keyCode == InputConstants.KEY_ESCAPE) { + close(); + return true; + } + + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().keyPressed(keyCode, scanCode, modifiers); + } + } catch (Exception e) { + bios.onFault(e); + } + + return true; + } + + @Override + public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().keyReleased(keyCode, scanCode, modifiers); + } + } catch (Exception e) { + bios.onFault(e); + } + + return true; + } + + @Override + public boolean charTyped(char codePoint, int modifiers) { + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().charTyped(codePoint, modifiers); + } + } catch (Exception e) { + bios.onFault(e); + } + + return true; + } + + @Override + public void mouseMoved(double mouseX, double mouseY) { + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().mouseMoved(mouseX, mouseY); + } + } catch (Exception e) { + bios.onFault(e); + } + } + + @Override + public void afterMouseAction() { + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().afterMouseAction(); + } + } catch (Exception e) { + bios.onFault(e); + } + } + + @Override + public void afterKeyboardAction() { + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().afterKeyboardAction(); + } + } catch (Exception e) { + bios.onFault(e); + } + } + + @Override + public void afterMouseMove() { + try { + OperatingSystem os = this.bios.getRunningOS(); + if (os != null) { + os.getScreen().afterMouseMove(); + } + } catch (Exception e) { + bios.onFault(e); + } + } + + private int getX() { + return this.width / 2 - screenWidth / 2; + } + + private int getY() { + return this.height / 2 - screenHeight / 2; + } + + protected void revalidateDisplay() { + this.disconnect(); + this.connect(os); + } + + private void disconnect() { + os.disconnectDisplay(); + + this.disconnectListener.accept(this); + this.connected = false; + } + + private void connect(OperatingSystem os) { + this.connectListener.accept(this); + this.connected = true; + os.connectDisplay(this); + } + + public void renderBezels() { + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + + //*************************// + // Physical Screen // + //*************************// + int deviceWidth = this.screenWidth + BORDER * 2; + int deviceHeight = this.screenHeight + BORDER * 2; + int posX = (this.width - deviceWidth) / 2; + int posY = (this.height - deviceHeight) / 2; + + // Corners + this.graphics.blit(LAPTOP_GUI, posX, posY, 0, 0, BORDER, BORDER); // TOP-LEFT + this.graphics.blit(LAPTOP_GUI, posX + deviceWidth - BORDER, posY, 11, 0, BORDER, BORDER); // TOP-RIGHT + this.graphics.blit(LAPTOP_GUI, posX + deviceWidth - BORDER, posY + deviceHeight - BORDER, 11, 11, BORDER, BORDER); // BOTTOM-RIGHT + this.graphics.blit(LAPTOP_GUI, posX, posY + deviceHeight - BORDER, 0, 11, BORDER, BORDER); // BOTTOM-LEFT + + // Edges + this.graphics.blit(LAPTOP_GUI, posX + BORDER, posY, this.screenWidth, BORDER, 10, 0, 1, BORDER, 256, 256); // TOP + this.graphics.blit(LAPTOP_GUI, posX + deviceWidth - BORDER, posY + BORDER, BORDER, this.screenHeight, 11, 10, BORDER, 1, 256, 256); // RIGHT + this.graphics.blit(LAPTOP_GUI, posX + BORDER, posY + deviceHeight - BORDER, this.screenWidth, BORDER, 10, 11, 1, BORDER, 256, 256); // BOTTOM + this.graphics.blit(LAPTOP_GUI, posX, posY + BORDER, BORDER, this.screenHeight, 0, 11, BORDER, 1, 256, 256); // LEFT + + // Center + this.graphics.blit(LAPTOP_GUI, posX + BORDER, posY + BORDER, this.screenWidth, this.screenHeight, 10, 10, 1, 1, 256, 256); + } + + public void setDisconnectListener(Consumer disconnectListener) { + this.disconnectListener = disconnectListener; + } + + public void setConnectListener(Consumer connectListener) { + this.connectListener = connectListener; + } + + public ComputerBlockEntity getComputer() { + return computer; + } + + public PoseStack getPose() { + return graphics.pose(); + } + + public PoseStack pose() { + return graphics.pose(); + } + + public OperatingSystem getOS() { + return os; + } +} diff --git a/common/src/main/java/com/ultreon/devices/client/RenderRegistry.java b/common/src/main/java/dev/ultreon/devices/client/RenderRegistry.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/client/RenderRegistry.java rename to common/src/main/java/dev/ultreon/devices/client/RenderRegistry.java index ca18df06c..b39f7cd4b 100644 --- a/common/src/main/java/com/ultreon/devices/client/RenderRegistry.java +++ b/common/src/main/java/dev/ultreon/devices/client/RenderRegistry.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.client; +package dev.ultreon.devices.client; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.level.block.Block; diff --git a/common/src/main/java/dev/ultreon/devices/core/BiosImpl.java b/common/src/main/java/dev/ultreon/devices/core/BiosImpl.java new file mode 100644 index 000000000..e7532d95b --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/core/BiosImpl.java @@ -0,0 +1,113 @@ +package dev.ultreon.devices.core; + +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.bios.*; +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.os.OperatingSystem; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.client.ClientNotification; +import net.minecraft.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; + +import java.util.List; +import java.util.UUID; + +public class BiosImpl implements Bios { + private final ComputerBlockEntity computer; + private final List> bootLoaders; + private OperatingSystem runningOS; + private Drive mainDrive; + + public BiosImpl(ComputerBlockEntity computer, List> bootLoaders) { + this.mainDrive = new Drive(Drive.Type.UNKNOWN, Util.NIL_UUID, "UNKNOWN"); + this.computer = computer; + this.bootLoaders = bootLoaders; + } + + @Override + public void sendNotification(BiosNotification notification) { + ClientNotification.of(notification).push(); + } + + public void powerOn() { + for (BootLoader bootLoader : bootLoaders) { + try { + this.runningOS = bootLoader.start(computer, this); + if (this.runningOS != null) return; + } catch (Exception e) { + UltreonDevicesMod.LOGGER.error("Failed to boot", e); + + this.handleFault(e); + return; + } + } + + LocalPlayer player = Minecraft.getInstance().player; + if (player != null) { + player.displayClientMessage(Component.literal("Failed to boot, no operating system found!"), true); + } + } + + @Override + public boolean powerOff() { + if (this.runningOS != null) { + try { + if (this.runningOS.onBiosInterrupt(new PowerModeInterrupt(PowerModeInterrupt.PowerMode.SHUTDOWN))) { + return false; + } + } catch (Exception e) { + UltreonDevicesMod.LOGGER.error("Failed to shutdown", e); + + this.handleFault(e); + } + } + return true; + } + + @Override + public void addOperatingSystem(BootLoader operatingSystem) { + this.bootLoaders.add(operatingSystem); + } + + @Override + public OperatingSystem getRunningOS() { + return this.runningOS; + } + + @Override + public Drive getMainDrive() { + return mainDrive; + } + + @Override + public void setMainDrive(Drive drive) { + this.mainDrive = drive; + } + + @Override + public UUID getDeviceId() { + return computer.getId(); + } + + private void handleFault(Exception e) { + try { + this.runningOS.onBiosInterrupt(new FaultInterrupt(e, "An error occurred in the BIOS")); + } catch (Exception ex) { + UltreonDevicesMod.LOGGER.error("Failed to handle fault", ex); + + try { + this.runningOS.onBiosInterrupt(new DoubleFaultInterrupt(ex, List.of(e), "Failed to handle fault")); + } catch (Exception exc) { + UltreonDevicesMod.LOGGER.error("Failed to handle double fault", exc); + + this.runningOS = null; + } + } + } + + public void onFault(Exception e) { + this.handleFault(e); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/core/BootLoader.java b/common/src/main/java/dev/ultreon/devices/core/BootLoader.java new file mode 100644 index 000000000..413250772 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/core/BootLoader.java @@ -0,0 +1,25 @@ +package dev.ultreon.devices.core; + +import dev.architectury.extensions.injected.InjectedRegistryEntryExtension; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.api.os.OperatingSystem; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; + +@FunctionalInterface +public interface BootLoader extends InjectedRegistryEntryExtension> { + T start(ComputerBlockEntity computer, Bios bios); + + @Override + default Holder> arch$holder() { + return UltreonDevicesMod.OPERATING_SYSTEM.getHolder(arch$registryName()); + } + + @Override + default @Nullable ResourceLocation arch$registryName() { + return UltreonDevicesMod.OPERATING_SYSTEM.getId(this); + } +} diff --git a/common/src/main/java/com/ultreon/devices/core/Device.java b/common/src/main/java/dev/ultreon/devices/core/Device.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/core/Device.java rename to common/src/main/java/dev/ultreon/devices/core/Device.java index e88959586..81681508e 100644 --- a/common/src/main/java/com/ultreon/devices/core/Device.java +++ b/common/src/main/java/dev/ultreon/devices/core/Device.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.core; +package dev.ultreon.devices.core; -import com.ultreon.devices.block.entity.DeviceBlockEntity; +import dev.ultreon.devices.block.entity.DeviceBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; diff --git a/common/src/main/java/com/ultreon/devices/core/Resizer.java b/common/src/main/java/dev/ultreon/devices/core/Resizer.java similarity index 98% rename from common/src/main/java/com/ultreon/devices/core/Resizer.java rename to common/src/main/java/dev/ultreon/devices/core/Resizer.java index 26cefea79..2b9a0ebff 100644 --- a/common/src/main/java/com/ultreon/devices/core/Resizer.java +++ b/common/src/main/java/dev/ultreon/devices/core/Resizer.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.core; +package dev.ultreon.devices.core; import org.joml.Vector2f; diff --git a/common/src/main/java/com/ultreon/devices/core/TaskBar.java b/common/src/main/java/dev/ultreon/devices/core/TaskBar.java similarity index 67% rename from common/src/main/java/com/ultreon/devices/core/TaskBar.java rename to common/src/main/java/dev/ultreon/devices/core/TaskBar.java index 00a59c9a0..4c3902b2f 100644 --- a/common/src/main/java/com/ultreon/devices/core/TaskBar.java +++ b/common/src/main/java/dev/ultreon/devices/core/TaskBar.java @@ -1,19 +1,18 @@ -package com.ultreon.devices.core; +package dev.ultreon.devices.core; import com.mojang.blaze3d.systems.RenderSystem; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.TrayItemAdder; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.event.LaptopEvent; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.network.TrayItemWifi; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.object.TrayItem; -import com.ultreon.devices.programs.system.AppStore; -import com.ultreon.devices.programs.system.FileBrowserApp; -import com.ultreon.devices.programs.system.SettingsApp; -import com.ultreon.devices.programs.system.SystemApp; -import com.ultreon.devices.util.Vulnerability; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.TrayItemAdder; +import dev.ultreon.devices.api.event.LaptopEvent; +import dev.ultreon.devices.api.util.Vulnerability; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.core.network.TrayItemWifi; +import dev.ultreon.devices.mineos.apps.system.AppStore; +import dev.ultreon.devices.mineos.apps.system.FileBrowserApp; +import dev.ultreon.devices.mineos.apps.system.SettingsApp; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.TrayItem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; @@ -26,16 +25,15 @@ import java.awt.*; import java.util.ArrayList; import java.util.List; -import java.util.function.Predicate; public class TaskBar { public static final ResourceLocation APP_BAR_GUI = new ResourceLocation("devices:textures/gui/application_bar.png"); public static final int BAR_HEIGHT = 18; - private static final int APPS_DISPLAYED = Devices.DEVELOPER_MODE ? 18 : 10; + private static final int APPS_DISPLAYED = UltreonDevicesMod.DEVELOPER_MODE ? 18 : 10; private final CompoundTag tag; - private final Laptop laptop; + private final MineOS laptop; private final int offset = 0; @@ -43,14 +41,14 @@ public class TaskBar { private static final Marker MARKER = MarkerFactory.getMarker("TaskBar"); /** - * @deprecated use {@link #TaskBar(Laptop, CompoundTag)} instead. + * @deprecated use {@link #TaskBar(MineOS, CompoundTag)} instead. */ @Deprecated - public TaskBar(Laptop laptop) { + public TaskBar(MineOS laptop) { this(laptop, new CompoundTag()); } - public TaskBar(Laptop laptop, CompoundTag tag) { + public TaskBar(MineOS laptop, CompoundTag tag) { this.laptop = laptop; this.tag = tag; @@ -79,23 +77,6 @@ public void init() { this.trayItems.forEach(TrayItem::init); } - public void setupApplications(List applications) { - final Predicate VALID_APPS = app -> { - if (app instanceof SystemApp) { - return true; - } - if (Devices.hasAllowedApplications()) { - if (Devices.getAllowedApplications().contains(app.getInfo())) { - return !Devices.DEVELOPER_MODE || Settings.isShowAllApps(); - } - return false; - } else if (Devices.DEVELOPER_MODE) { - return Settings.isShowAllApps(); - } - return true; - }; - } - public void init(int posX, int posY) { init(); } @@ -104,7 +85,7 @@ public void onTick() { trayItems.forEach(TrayItem::tick); } - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, float partialTicks) { RenderSystem.setShaderColor(1f, 1f, 1f, 0.75f); RenderSystem.enableBlend(); RenderSystem.setShaderTexture(0, APP_BAR_GUI); @@ -117,14 +98,14 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int int trayItemsWidth = trayItems.size() * 14; graphics.blit(APP_BAR_GUI, x, y, 1, 18, 0, 0, 1, 18, 256, 256); - graphics.blit(APP_BAR_GUI, x + 1, y, Laptop.getScreenWidth() - 36 - trayItemsWidth, 18, 1, 0, 1, 18, 256, 256); - graphics.blit(APP_BAR_GUI, x + Laptop.getScreenWidth() - 35 - trayItemsWidth, y, 35 + trayItemsWidth, 18, 2, 0, 1, 18, 256, 256); + graphics.blit(APP_BAR_GUI, x + 1, y, MineOS.getOpened().getScreenWidth() - 36 - trayItemsWidth, 18, 1, 0, 1, 18, 256, 256); + graphics.blit(APP_BAR_GUI, x + MineOS.getOpened().getScreenWidth() - 35 - trayItemsWidth, y, 35 + trayItemsWidth, 18, 2, 0, 1, 18, 256, 256); RenderSystem.disableBlend(); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - for (int i = 0; i < APPS_DISPLAYED && i < laptop.installedApps.size(); i++) { - AppInfo info = laptop.installedApps.get(i + offset); + for (int i = 0; i < APPS_DISPLAYED && i < laptop.getInstalledApplications().size(); i++) { + AppInfo info = laptop.getInstalledApplications().get(i + offset); RenderUtil.drawApplicationIcon(graphics, info, x + 2 + i * 16, y + 2); if (laptop.isApplicationRunning(info)) { RenderSystem.setShaderTexture(0, APP_BAR_GUI); @@ -134,10 +115,10 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int assert mc.level == null || mc.player != null; // assert mc.level != null; //can no longer assume - graphics.drawString(mc.font, timeToString(mc.level != null ? mc.level.getDayTime() : 0), x + Laptop.getScreenWidth() - 31, y + 5, Color.WHITE.getRGB(), true); + graphics.drawString(mc.font, timeToString(mc.level != null ? mc.level.getDayTime() : 0), x + MineOS.getOpened().getScreenWidth() - 31, y + 5, Color.WHITE.getRGB(), true); /* Settings App */ - int startX = x + Laptop.getScreenWidth() - 48; + int startX = x + MineOS.getOpened().getScreenWidth() - 48; for (int i = 0; i < trayItems.size(); i++) { int posX = startX - (trayItems.size() - 1 - i) * 14; if (isMouseInside(mouseX, mouseY, posX, y + 2, posX + 13, y + 15)) { @@ -151,32 +132,32 @@ public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int /* Other Apps */ if (isMouseInside(mouseX, mouseY, x + 1, y + 1, x + 236, y + 16)) { int appIndex = (mouseX - x - 1) / 16; - if (appIndex >= 0 && appIndex < offset + APPS_DISPLAYED && appIndex < laptop.installedApps.size()) { + if (appIndex >= 0 && appIndex < offset + APPS_DISPLAYED && appIndex < laptop.getInstalledApplications().size()) { graphics.blit(APP_BAR_GUI, x + appIndex * 16 + 1, y + 1, 35, 0, 16, 16); - laptop.renderComponentTooltip(graphics, List.of(Component.literal(laptop.installedApps.get(appIndex).getName())), mouseX, mouseY); + laptop.renderComponentTooltip(graphics, List.of(Component.literal(laptop.getInstalledApplications().get(appIndex).getName())), mouseX, mouseY); } } RenderSystem.setShaderColor(1f, 1f, 1f, 1f); } - public void handleClick(Laptop laptop, int x, int y, int mouseX, int mouseY, int mouseButton) { + public void handleClick(MineOS laptop, int x, int y, int mouseX, int mouseY, int mouseButton) { if (isMouseInside(mouseX, mouseY, x + 1, y + 1, x + 236, y + 16)) { - Devices.LOGGER.debug(MARKER, "Clicked on task bar"); + UltreonDevicesMod.LOGGER.debug(MARKER, "Clicked on task bar"); int appIndex = (mouseX - x - 1) / 16; - if (appIndex >= 0 && appIndex <= offset + APPS_DISPLAYED && appIndex < laptop.installedApps.size()) { - laptop.openApplication(laptop.installedApps.get(appIndex)); + if (appIndex >= 0 && appIndex <= offset + APPS_DISPLAYED && appIndex < laptop.getInstalledApplications().size()) { + laptop.openApplication(laptop.getInstalledApplications().get(appIndex)); return; } } - int startX = x + Laptop.getScreenWidth() - 48; + int startX = x + MineOS.getOpened().getScreenWidth() - 48; for (int i = 0; i < trayItems.size(); i++) { int posX = startX - (trayItems.size() - 1 - i) * 14; if (isMouseInside(mouseX, mouseY, posX, y + 2, posX + 13, y + 15)) { TrayItem trayItem = trayItems.get(i); trayItem.handleClick(mouseX, mouseY, mouseButton); - Devices.LOGGER.debug(MARKER, "Clicked on tray item (%d): %s".formatted(i, trayItem.getClass().getSimpleName())); + UltreonDevicesMod.LOGGER.debug(MARKER, "Clicked on tray item (%d): %s".formatted(i, trayItem.getClass().getSimpleName())); break; } } @@ -192,7 +173,7 @@ public String timeToString(long time) { return String.format("%02d:%02d", hours, minutes); } - public Laptop getLaptop() { + public MineOS getLaptop() { return laptop; } diff --git a/common/src/main/java/dev/ultreon/devices/core/WorldLessBiosImpl.java b/common/src/main/java/dev/ultreon/devices/core/WorldLessBiosImpl.java new file mode 100644 index 000000000..f41852168 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/core/WorldLessBiosImpl.java @@ -0,0 +1,60 @@ +package dev.ultreon.devices.core; + +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.api.bios.BiosNotification; +import dev.ultreon.devices.api.bios.PowerModeInterrupt; +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.os.OperatingSystem; +import dev.ultreon.devices.core.client.ClientNotification; + +import java.util.UUID; + +public class WorldLessBiosImpl implements Bios { + private static final UUID VIRTUAL_ID = new UUID(0xaa7bcf606c8c4f13L, 0x8f2fc2359c6b2543L); + private OperatingSystem runningOS; + private final BootLoader os; + + public WorldLessBiosImpl(BootLoader os) { + this.os = os; + } + + @Override + public void sendNotification(BiosNotification notification) { + ClientNotification.of(notification).push(); + } + + public boolean powerOn() { + runningOS = this.os.start(null, this); + return runningOS != null; + } + + @Override + public boolean powerOff() { + return runningOS.onBiosInterrupt(new PowerModeInterrupt(PowerModeInterrupt.PowerMode.SHUTDOWN)); + } + + @Override + public void addOperatingSystem(BootLoader operatingSystem) { + // No-op + } + + @Override + public OperatingSystem getRunningOS() { + return null; + } + + @Override + public Drive getMainDrive() { + return null; + } + + @Override + public void setMainDrive(Drive drive) { + + } + + @Override + public UUID getDeviceId() { + return VIRTUAL_ID; + } +} diff --git a/common/src/main/java/com/ultreon/devices/core/Wrappable.java b/common/src/main/java/dev/ultreon/devices/core/Wrappable.java similarity index 96% rename from common/src/main/java/com/ultreon/devices/core/Wrappable.java rename to common/src/main/java/dev/ultreon/devices/core/Wrappable.java index e791ca159..84f391b69 100644 --- a/common/src/main/java/com/ultreon/devices/core/Wrappable.java +++ b/common/src/main/java/dev/ultreon/devices/core/Wrappable.java @@ -1,7 +1,8 @@ -package com.ultreon.devices.core; +package dev.ultreon.devices.core; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.mineos.client.Window; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; @@ -40,7 +41,7 @@ public abstract class Wrappable { * @param active if the window active * @param partialTicks time passed since tick */ - public abstract void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks); + public abstract void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks); /** * Called when a key is typed from your keyboard. Note if you override, make diff --git a/common/src/main/java/com/ultreon/devices/core/client/ClientNotification.java b/common/src/main/java/dev/ultreon/devices/core/client/ClientNotification.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/core/client/ClientNotification.java rename to common/src/main/java/dev/ultreon/devices/core/client/ClientNotification.java index 386230cc8..86834ec7f 100644 --- a/common/src/main/java/com/ultreon/devices/core/client/ClientNotification.java +++ b/common/src/main/java/dev/ultreon/devices/core/client/ClientNotification.java @@ -1,9 +1,10 @@ -package com.ultreon.devices.core.client; +package dev.ultreon.devices.core.client; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.IIcon; -import com.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.IIcon; +import dev.ultreon.devices.api.bios.BiosNotification; +import dev.ultreon.devices.api.utils.RenderUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; @@ -28,6 +29,15 @@ public class ClientNotification implements Toast { private ClientNotification() { } + public static ClientNotification of(BiosNotification notification) { + ClientNotification clientNotification = new ClientNotification(); + clientNotification.icon = notification.icon(); + clientNotification.title = notification.title(); + clientNotification.subTitle = notification.subTitle(); + + return clientNotification; + } + @NotNull @Override public Visibility render(@NotNull GuiGraphics graphics, ToastComponent toastComponent, long timeSinceLastVisible) { @@ -58,7 +68,7 @@ public static ClientNotification loadFromTag(CompoundTag tag) { try { notification.icon = (IIcon) Class.forName(className).getEnumConstants()[ordinal]; } catch (ClassNotFoundException e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("Failed to load icon", e); } notification.title = tag.getString("title"); diff --git a/common/src/main/java/com/ultreon/devices/core/client/LaptopFont.java b/common/src/main/java/dev/ultreon/devices/core/client/LaptopFont.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/core/client/LaptopFont.java rename to common/src/main/java/dev/ultreon/devices/core/client/LaptopFont.java index 9c390e038..19d1dbcd2 100644 --- a/common/src/main/java/com/ultreon/devices/core/client/LaptopFont.java +++ b/common/src/main/java/dev/ultreon/devices/core/client/LaptopFont.java @@ -1,8 +1,4 @@ -package com.ultreon.devices.core.client; - -import com.ultreon.devices.Devices; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; +package dev.ultreon.devices.core.client; /** * @author MrCrayfish diff --git a/common/src/main/java/com/ultreon/devices/core/client/LaptopFontSet.java b/common/src/main/java/dev/ultreon/devices/core/client/LaptopFontSet.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/core/client/LaptopFontSet.java rename to common/src/main/java/dev/ultreon/devices/core/client/LaptopFontSet.java index a64597f3d..a9e91483b 100644 --- a/common/src/main/java/com/ultreon/devices/core/client/LaptopFontSet.java +++ b/common/src/main/java/dev/ultreon/devices/core/client/LaptopFontSet.java @@ -1,17 +1,11 @@ -package com.ultreon.devices.core.client; +package dev.ultreon.devices.core.client; -import com.mojang.blaze3d.font.GlyphInfo; -import com.mojang.blaze3d.font.SheetGlyphInfo; import net.minecraft.client.gui.font.FontSet; -import net.minecraft.client.gui.font.glyphs.BakedGlyph; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Function; /** - * @author Qboi123 + * @author XyperCode */ public class LaptopFontSet extends FontSet { // private static final GlyphInfo TAB_INFO = new GlyphInfo() { diff --git a/common/src/main/java/com/ultreon/devices/core/client/debug/ClientAppDebug.java b/common/src/main/java/dev/ultreon/devices/core/client/debug/ClientAppDebug.java similarity index 73% rename from common/src/main/java/com/ultreon/devices/core/client/debug/ClientAppDebug.java rename to common/src/main/java/dev/ultreon/devices/core/client/debug/ClientAppDebug.java index f08ee09d0..68edfd99d 100644 --- a/common/src/main/java/com/ultreon/devices/core/client/debug/ClientAppDebug.java +++ b/common/src/main/java/dev/ultreon/devices/core/client/debug/ClientAppDebug.java @@ -1,13 +1,14 @@ -package com.ultreon.devices.core.client.debug; +package dev.ultreon.devices.core.client.debug; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.block.entity.LaptopBlockEntity; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.laptop.client.ClientLaptop; -import com.ultreon.devices.core.laptop.client.ClientLaptopScreen; -import com.ultreon.devices.core.laptop.server.ServerLaptop; -import com.ultreon.devices.init.DeviceBlocks; import dev.architectury.event.events.client.ClientGuiEvent; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.block.entity.LaptopBlockEntity; +import dev.ultreon.devices.core.WorldLessBiosImpl; +import dev.ultreon.devices.core.laptop.client.ClientLaptop; +import dev.ultreon.devices.core.laptop.client.ClientLaptopScreen; +import dev.ultreon.devices.core.laptop.server.ServerLaptop; +import dev.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.TitleScreen; @@ -15,6 +16,8 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.item.DyeColor; +import static dev.ultreon.devices.OperatingSystems.MINE_OS; + /** * Adds a button to the title screen to test system applications that don't require the system */ @@ -26,7 +29,7 @@ public static void register() { var rowHeight = 24; var y = screen.height / 4 + 48; - var a = Button.builder(Component.literal("DV TEST"), (button) -> Minecraft.getInstance().setScreen(new Laptop(new LaptopBlockEntity(new BlockPos(0, 0, 0), DeviceBlocks.LAPTOPS.of(DyeColor.WHITE).get().defaultBlockState()), true))).bounds(screen.width / 2 - 100, y + rowHeight * -1, 200, 20) + var a = Button.builder(Component.literal("DV TEST"), (button) -> Minecraft.getInstance().setScreen(new MineOS(new LaptopBlockEntity(new BlockPos(0, 0, 0), DeviceBlocks.LAPTOPS.of(DyeColor.WHITE).get().defaultBlockState()), new WorldLessBiosImpl(MINE_OS.get()), true))).bounds(screen.width / 2 - 100, y + rowHeight * -1, 200, 20) .createNarration((output) -> Component.empty()) .build(); access.addRenderableWidget(a); diff --git a/common/src/main/java/com/ultreon/devices/core/io/FileSystem.java b/common/src/main/java/dev/ultreon/devices/core/io/FileSystem.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/core/io/FileSystem.java rename to common/src/main/java/dev/ultreon/devices/core/io/FileSystem.java index 81391144d..c23893c71 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/FileSystem.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/FileSystem.java @@ -1,24 +1,24 @@ -package com.ultreon.devices.core.io; - -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.io.Drive; -import com.ultreon.devices.api.io.Folder; -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.io.action.FileAction; -import com.ultreon.devices.core.io.drive.AbstractDrive; -import com.ultreon.devices.core.io.drive.ExternalDrive; -import com.ultreon.devices.core.io.drive.InternalDrive; -import com.ultreon.devices.core.io.task.TaskGetFiles; -import com.ultreon.devices.core.io.task.TaskGetMainDrive; -import com.ultreon.devices.core.io.task.TaskSendAction; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.init.DeviceItems; -import com.ultreon.devices.item.FlashDriveItem; +package dev.ultreon.devices.core.io; + +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.io.Folder; +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.io.action.FileAction; +import dev.ultreon.devices.core.io.drive.AbstractDrive; +import dev.ultreon.devices.core.io.drive.ExternalDrive; +import dev.ultreon.devices.core.io.drive.InternalDrive; +import dev.ultreon.devices.core.io.task.TaskGetFiles; +import dev.ultreon.devices.core.io.task.TaskGetMainDrive; +import dev.ultreon.devices.core.io.task.TaskSendAction; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.init.DeviceItems; +import dev.ultreon.devices.item.FlashDriveItem; +import dev.ultreon.devices.mineos.client.MineOS; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.nbt.CompoundTag; @@ -62,7 +62,7 @@ public FileSystem(ComputerBlockEntity blockEntity, CompoundTag tag) { @Environment(EnvType.CLIENT) public static void sendAction(Drive drive, FileAction action, @Nullable Callback callback) { - if (Laptop.getPos() != null) { + if (MineOS.getOpened().getPos() != null) { DebugLog.log("Sending action " + action + " to " + drive); Task task = new TaskSendAction(drive, action); task.setCallback((tag, success) -> { @@ -75,20 +75,20 @@ public static void sendAction(Drive drive, FileAction action, @Nullable Callback }); TaskManager.sendTask(task); } else { - DebugLog.log("Sending action " + action + " to " + drive + " failed: Laptop not found"); + DebugLog.log("Sending action " + action + " to " + drive + " failed: MineOS not found"); } } public static void getApplicationFolder(Application app, Callback callback) { - if (Devices.hasAllowedApplications()) { // in arch we do not do instances - if (!Devices.getAllowedApplications().contains(app.getInfo())) { + if (UltreonDevicesMod.hasAllowedApplications()) { // in arch we do not do instances + if (!UltreonDevicesMod.getAllowedApplications().contains(app.getInfo())) { callback.execute(null, false); return; } } - if (Laptop.getMainDrive() == null) { - Task task = new TaskGetMainDrive(Laptop.getPos()); + if (MineOS.getOpened().getMainDrive() == null) { + Task task = new TaskGetMainDrive(MineOS.getOpened().getPos()); task.setCallback((tag, success) -> { if (success) { setupApplicationFolder(app, callback); @@ -104,8 +104,8 @@ public static void getApplicationFolder(Application app, Callback callba } private static void setupApplicationFolder(Application app, Callback callback) { - assert Laptop.getMainDrive() != null; - Folder folder = Laptop.getMainDrive().getFolder(FileSystem.DIR_APPLICATION_DATA); + assert MineOS.getOpened().getMainDrive() != null; + Folder folder = MineOS.getOpened().getMainDrive().getFolder(FileSystem.DIR_APPLICATION_DATA); if (folder != null) { if (folder.hasFolder(app.getInfo().getFormattedId())) { Folder appFolder = folder.getFolder(app.getInfo().getFormattedId()); @@ -113,7 +113,7 @@ private static void setupApplicationFolder(Application app, Callback cal if (appFolder.isSynced()) { callback.execute(appFolder, true); } else { - Task task = new TaskGetFiles(appFolder, Laptop.getPos()); + Task task = new TaskGetFiles(appFolder, MineOS.getOpened().getPos()); task.setCallback((tag, success) -> { assert tag != null; if (success && tag.contains("files", Tag.TAG_LIST)) { diff --git a/common/src/main/java/com/ultreon/devices/core/io/ServerFile.java b/common/src/main/java/dev/ultreon/devices/core/io/ServerFile.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/core/io/ServerFile.java rename to common/src/main/java/dev/ultreon/devices/core/io/ServerFile.java index 484c787c3..17cc651b7 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/ServerFile.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/ServerFile.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.core.io; +package dev.ultreon.devices.core.io; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.io.MimeType; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.io.MimeType; import net.minecraft.nbt.CompoundTag; - import org.jetbrains.annotations.Nullable; + import java.util.Comparator; /** diff --git a/common/src/main/java/com/ultreon/devices/core/io/ServerFolder.java b/common/src/main/java/dev/ultreon/devices/core/io/ServerFolder.java similarity index 98% rename from common/src/main/java/com/ultreon/devices/core/io/ServerFolder.java rename to common/src/main/java/dev/ultreon/devices/core/io/ServerFolder.java index 77135929d..99ea779a2 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/ServerFolder.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/ServerFolder.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.core.io; +package dev.ultreon.devices.core.io; -import com.ultreon.devices.core.io.FileSystem.Status; +import dev.ultreon.devices.core.io.FileSystem.Status; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; - import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; + import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; diff --git a/common/src/main/java/com/ultreon/devices/core/io/action/FileAction.java b/common/src/main/java/dev/ultreon/devices/core/io/action/FileAction.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/core/io/action/FileAction.java rename to common/src/main/java/dev/ultreon/devices/core/io/action/FileAction.java index 64d17ed53..66b8c83da 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/action/FileAction.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/action/FileAction.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.core.io.action; +package dev.ultreon.devices.core.io.action; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.api.io.Folder; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.io.Folder; import net.minecraft.nbt.CompoundTag; /** diff --git a/common/src/main/java/com/ultreon/devices/core/io/drive/AbstractDrive.java b/common/src/main/java/dev/ultreon/devices/core/io/drive/AbstractDrive.java similarity index 96% rename from common/src/main/java/com/ultreon/devices/core/io/drive/AbstractDrive.java rename to common/src/main/java/dev/ultreon/devices/core/io/drive/AbstractDrive.java index fe08e7088..c4951c74a 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/drive/AbstractDrive.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/drive/AbstractDrive.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.core.io.drive; +package dev.ultreon.devices.core.io.drive; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.ServerFile; -import com.ultreon.devices.core.io.ServerFolder; -import com.ultreon.devices.core.io.action.FileAction; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.ServerFile; +import dev.ultreon.devices.core.io.ServerFolder; +import dev.ultreon.devices.core.io.action.FileAction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/core/io/drive/ExternalDrive.java b/common/src/main/java/dev/ultreon/devices/core/io/drive/ExternalDrive.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/core/io/drive/ExternalDrive.java rename to common/src/main/java/dev/ultreon/devices/core/io/drive/ExternalDrive.java index 10099f6bb..84a9d7092 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/drive/ExternalDrive.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/drive/ExternalDrive.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.core.io.drive; +package dev.ultreon.devices.core.io.drive; -import com.ultreon.devices.core.io.ServerFolder; +import dev.ultreon.devices.core.io.ServerFolder; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/com/ultreon/devices/core/io/drive/InternalDrive.java b/common/src/main/java/dev/ultreon/devices/core/io/drive/InternalDrive.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/core/io/drive/InternalDrive.java rename to common/src/main/java/dev/ultreon/devices/core/io/drive/InternalDrive.java index ed50a4a8a..45d995056 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/drive/InternalDrive.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/drive/InternalDrive.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.core.io.drive; +package dev.ultreon.devices.core.io.drive; -import com.ultreon.devices.core.io.ServerFolder; +import dev.ultreon.devices.core.io.ServerFolder; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import org.jetbrains.annotations.NotNull; diff --git a/common/src/main/java/com/ultreon/devices/core/io/drive/NetworkDrive.java b/common/src/main/java/dev/ultreon/devices/core/io/drive/NetworkDrive.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/core/io/drive/NetworkDrive.java rename to common/src/main/java/dev/ultreon/devices/core/io/drive/NetworkDrive.java index 6b83f136e..80b4f5a7b 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/drive/NetworkDrive.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/drive/NetworkDrive.java @@ -1,13 +1,12 @@ -package com.ultreon.devices.core.io.drive; +package dev.ultreon.devices.core.io.drive; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.ServerFolder; -import com.ultreon.devices.core.io.action.FileAction; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.ServerFolder; +import dev.ultreon.devices.core.io.action.FileAction; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; - import org.jetbrains.annotations.Nullable; /** diff --git a/common/src/main/java/com/ultreon/devices/core/io/task/TaskGetFiles.java b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetFiles.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/core/io/task/TaskGetFiles.java rename to common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetFiles.java index 0aad4a4fe..09391df38 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/task/TaskGetFiles.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetFiles.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.core.io.task; +package dev.ultreon.devices.core.io.task; -import com.ultreon.devices.api.io.Folder; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.ServerFile; -import com.ultreon.devices.core.io.ServerFolder; -import com.ultreon.devices.core.io.drive.AbstractDrive; +import dev.ultreon.devices.api.io.Folder; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.ServerFile; +import dev.ultreon.devices.core.io.ServerFolder; +import dev.ultreon.devices.core.io.drive.AbstractDrive; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; diff --git a/common/src/main/java/com/ultreon/devices/core/io/task/TaskGetMainDrive.java b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetMainDrive.java similarity index 73% rename from common/src/main/java/com/ultreon/devices/core/io/task/TaskGetMainDrive.java rename to common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetMainDrive.java index 0a75c4789..42f8e6099 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/task/TaskGetMainDrive.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetMainDrive.java @@ -1,12 +1,13 @@ -package com.ultreon.devices.core.io.task; +package dev.ultreon.devices.core.io.task; -import com.ultreon.devices.api.io.Drive; -import com.ultreon.devices.api.io.Folder; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.drive.AbstractDrive; +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.io.Folder; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.drive.AbstractDrive; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -48,7 +49,7 @@ public void processRequest(CompoundTag tag, Level level, Player player) { @Override public void prepareResponse(CompoundTag tag) { - if (this.isSucessful()) { + if (this.isSuccessful()) { CompoundTag mainDriveTag = new CompoundTag(); mainDriveTag.putString("name", mainDrive.getName()); mainDriveTag.putString("uuid", mainDrive.getUuid().toString()); @@ -60,15 +61,16 @@ public void prepareResponse(CompoundTag tag) { @Override public void processResponse(CompoundTag tag) { - if (this.isSucessful()) { - if (Minecraft.getInstance().screen instanceof Laptop) { + if (this.isSuccessful()) { + if (Minecraft.getInstance().screen instanceof MineOS) { CompoundTag structureTag = tag.getCompound("structure"); Drive drive = new Drive(tag.getCompound("main_drive")); drive.syncRoot(Folder.fromTag(FileSystem.LAPTOP_DRIVE_NAME, structureTag)); drive.getRoot().validate(); - if (Laptop.getMainDrive() == null) { - Laptop.setMainDrive(drive); + Bios bios = MineOS.getOpened().getBios(); + if (bios.getMainDrive() == null) { + bios.setMainDrive(drive); } } } diff --git a/common/src/main/java/com/ultreon/devices/core/io/task/TaskGetStructure.java b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetStructure.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/core/io/task/TaskGetStructure.java rename to common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetStructure.java index d3812c330..f8abf8f61 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/task/TaskGetStructure.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskGetStructure.java @@ -1,13 +1,12 @@ -package com.ultreon.devices.core.io.task; +package dev.ultreon.devices.core.io.task; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.io.Drive; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.ServerFolder; -import com.ultreon.devices.core.io.drive.AbstractDrive; -import com.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.ServerFolder; +import dev.ultreon.devices.core.io.drive.AbstractDrive; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; @@ -45,7 +44,7 @@ public void prepareRequest(CompoundTag tag) { public void processRequest(CompoundTag tag, Level level, Player player) { BlockPos pos1 = BlockPos.of(tag.getLong("pos")); - Devices.getServer().submit(() -> { + UltreonDevicesMod.getServer().submit(() -> { BlockEntity tileEntity = level.getBlockEntity(pos1); if (tileEntity instanceof ComputerBlockEntity laptop) { FileSystem fileSystem = laptop.getFileSystem(); diff --git a/common/src/main/java/com/ultreon/devices/core/io/task/TaskSendAction.java b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskSendAction.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/core/io/task/TaskSendAction.java rename to common/src/main/java/dev/ultreon/devices/core/io/task/TaskSendAction.java index 5756d4767..44c5124e8 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/task/TaskSendAction.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskSendAction.java @@ -1,11 +1,11 @@ -package com.ultreon.devices.core.io.task; - -import com.ultreon.devices.api.io.Drive; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.action.FileAction; +package dev.ultreon.devices.core.io.task; + +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.action.FileAction; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; @@ -31,7 +31,7 @@ public TaskSendAction(Drive drive, FileAction action) { this(); this.uuid = drive.getUUID().toString(); this.action = action; - this.pos = Laptop.getPos(); + this.pos = MineOS.getOpened().getPos(); } @Override diff --git a/common/src/main/java/com/ultreon/devices/core/io/task/TaskSetupFileBrowser.java b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskSetupFileBrowser.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/core/io/task/TaskSetupFileBrowser.java rename to common/src/main/java/dev/ultreon/devices/core/io/task/TaskSetupFileBrowser.java index 42fa71eef..626c29b4e 100644 --- a/common/src/main/java/com/ultreon/devices/core/io/task/TaskSetupFileBrowser.java +++ b/common/src/main/java/dev/ultreon/devices/core/io/task/TaskSetupFileBrowser.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.core.io.task; +package dev.ultreon.devices.core.io.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.drive.AbstractDrive; -import com.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.drive.AbstractDrive; +import dev.ultreon.devices.debug.DebugLog; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -57,7 +57,7 @@ public void processRequest(CompoundTag tag, Level level, Player player) { @Override public void prepareResponse(CompoundTag tag) { - if (this.isSucessful()) { + if (this.isSuccessful()) { if (mainDrive != null) { CompoundTag mainDriveTag = new CompoundTag(); mainDriveTag.putString("name", mainDrive.getName()); diff --git a/common/src/main/java/com/ultreon/devices/core/laptop/client/ClientLaptop.java b/common/src/main/java/dev/ultreon/devices/core/laptop/client/ClientLaptop.java similarity index 69% rename from common/src/main/java/com/ultreon/devices/core/laptop/client/ClientLaptop.java rename to common/src/main/java/dev/ultreon/devices/core/laptop/client/ClientLaptop.java index 242801391..8bed94ade 100644 --- a/common/src/main/java/com/ultreon/devices/core/laptop/client/ClientLaptop.java +++ b/common/src/main/java/dev/ultreon/devices/core/laptop/client/ClientLaptop.java @@ -1,36 +1,20 @@ -package com.ultreon.devices.core.laptop.client; +package dev.ultreon.devices.core.laptop.client; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.*; -import com.ultreon.devices.Devices; -import com.ultreon.devices.Reference; -import com.ultreon.devices.core.laptop.common.C2SUpdatePacket; -import com.ultreon.devices.core.laptop.common.TaskBar; -import com.ultreon.devices.core.laptop.server.ServerLaptop; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.network.PacketHandler; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.ultreon.devices.core.laptop.common.C2SUpdatePacket; +import dev.ultreon.devices.core.laptop.common.TaskBar; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.network.PacketHandler; import net.minecraft.client.Minecraft; -import net.minecraft.client.Screenshot; -import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.gui.screens.inventory.ContainerScreen; -import net.minecraft.client.renderer.GameRenderer; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.ChestMenu; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.HashMap; import java.util.UUID; -import static com.ultreon.devices.core.laptop.client.ClientLaptopScreen.LAPTOP_GUI; +import static dev.ultreon.devices.core.laptop.client.ClientLaptopScreen.LAPTOP_GUI; // NO STATICS @@ -85,7 +69,7 @@ public void render(final @NotNull GuiGraphics graphics, final int mouseX, final graphics.blit(LAPTOP_GUI, 0, 0, ClientLaptop.SCREEN_WIDTH, ClientLaptop.SCREEN_HEIGHT, 10, 10, 1, 1, 256, 256); //RenderSystem.enableBlend(); - graphics.drawString(Minecraft.getInstance().font, "New Laptop System 0.01% complete", 0, 0, 0xffffff); + graphics.drawString(Minecraft.getInstance().font, "New MineOS System 0.01% complete", 0, 0, 0xffffff); graphics.fill(0, 0, 10, 10, 0x2e2e2e); taskbar.render(graphics, this, Minecraft.getInstance(), 0, SCREEN_HEIGHT-16, mouseX, mouseY, partialTicks); DebugLog.log("x = " + square[0]); diff --git a/common/src/main/java/com/ultreon/devices/core/laptop/client/ClientLaptopScreen.java b/common/src/main/java/dev/ultreon/devices/core/laptop/client/ClientLaptopScreen.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/core/laptop/client/ClientLaptopScreen.java rename to common/src/main/java/dev/ultreon/devices/core/laptop/client/ClientLaptopScreen.java index b490f059f..8d5c14f6b 100644 --- a/common/src/main/java/com/ultreon/devices/core/laptop/client/ClientLaptopScreen.java +++ b/common/src/main/java/dev/ultreon/devices/core/laptop/client/ClientLaptopScreen.java @@ -1,10 +1,8 @@ -package com.ultreon.devices.core.laptop.client; +package dev.ultreon.devices.core.laptop.client; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Reference; -import com.ultreon.devices.debug.DebugLog; -import net.minecraft.client.gui.Gui; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.debug.DebugLog; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; @@ -26,7 +24,7 @@ public ClientLaptopScreen(ClientLaptop laptop) { } public void renderBezels(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, float partialTicks) { - this.renderBackground(graphics); + this.renderBackground(graphics, mouseX, mouseY, partialTicks); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); RenderSystem.setShaderTexture(0, LAPTOP_GUI); diff --git a/common/src/main/java/com/ultreon/devices/core/laptop/common/C2SUpdatePacket.java b/common/src/main/java/dev/ultreon/devices/core/laptop/common/C2SUpdatePacket.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/core/laptop/common/C2SUpdatePacket.java rename to common/src/main/java/dev/ultreon/devices/core/laptop/common/C2SUpdatePacket.java index 843a2daa1..9cec14a2e 100644 --- a/common/src/main/java/com/ultreon/devices/core/laptop/common/C2SUpdatePacket.java +++ b/common/src/main/java/dev/ultreon/devices/core/laptop/common/C2SUpdatePacket.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.core.laptop.common; +package dev.ultreon.devices.core.laptop.common; -import com.ultreon.devices.core.laptop.client.ClientLaptop; -import com.ultreon.devices.core.laptop.server.ServerLaptop; -import com.ultreon.devices.network.Packet; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.core.laptop.server.ServerLaptop; +import dev.ultreon.devices.network.Packet; import net.fabricmc.api.EnvType; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; diff --git a/common/src/main/java/com/ultreon/devices/core/laptop/common/S2CUpdatePacket.java b/common/src/main/java/dev/ultreon/devices/core/laptop/common/S2CUpdatePacket.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/core/laptop/common/S2CUpdatePacket.java rename to common/src/main/java/dev/ultreon/devices/core/laptop/common/S2CUpdatePacket.java index 07427e777..d25ab6b27 100644 --- a/common/src/main/java/com/ultreon/devices/core/laptop/common/S2CUpdatePacket.java +++ b/common/src/main/java/dev/ultreon/devices/core/laptop/common/S2CUpdatePacket.java @@ -1,12 +1,10 @@ -package com.ultreon.devices.core.laptop.common; +package dev.ultreon.devices.core.laptop.common; -import com.ultreon.devices.core.laptop.client.ClientLaptop; -import com.ultreon.devices.core.laptop.server.ServerLaptop; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.network.Packet; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.core.laptop.client.ClientLaptop; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.network.Packet; import net.fabricmc.api.EnvType; -import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; diff --git a/common/src/main/java/com/ultreon/devices/core/laptop/common/TaskBar.java b/common/src/main/java/dev/ultreon/devices/core/laptop/common/TaskBar.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/core/laptop/common/TaskBar.java rename to common/src/main/java/dev/ultreon/devices/core/laptop/common/TaskBar.java index 33150e334..a13c5db9d 100644 --- a/common/src/main/java/com/ultreon/devices/core/laptop/common/TaskBar.java +++ b/common/src/main/java/dev/ultreon/devices/core/laptop/common/TaskBar.java @@ -1,10 +1,9 @@ -package com.ultreon.devices.core.laptop.common; +package dev.ultreon.devices.core.laptop.common; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Devices; -import com.ultreon.devices.core.laptop.client.ClientLaptop; -import com.ultreon.devices.programs.system.object.ColorScheme; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.core.laptop.client.ClientLaptop; +import dev.ultreon.devices.mineos.apps.system.object.ColorScheme; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; @@ -16,7 +15,7 @@ public class TaskBar { public static final ResourceLocation APP_BAR_GUI = new ResourceLocation("devices:textures/gui/application_bar.png"); public static final int BAR_HEIGHT = 18; - private static final int APPS_DISPLAYED = Devices.DEVELOPER_MODE ? 18 : 10; + private static final int APPS_DISPLAYED = UltreonDevicesMod.DEVELOPER_MODE ? 18 : 10; private final ClientLaptop laptop; private final int offset = 0; @@ -101,7 +100,7 @@ public void render(GuiGraphics graphics, ClientLaptop laptop, Minecraft mc, int public void handleClick(ClientLaptop laptop, int x, int y, int mouseX, int mouseY, int mouseButton) { if (isMouseInside(mouseX, mouseY, x + 1, y + 1, x + 236, y + 16)) { - Devices.LOGGER.debug(MARKER, "Clicked on task bar"); + UltreonDevicesMod.LOGGER.debug(MARKER, "Clicked on task bar"); // int appIndex = (mouseX - x - 1) / 16; // if (appIndex >= 0 && appIndex <= offset + APPS_DISPLAYED && appIndex < laptop.installedApps.size()) { // laptop.openApplication(laptop.installedApps.get(appIndex)); diff --git a/common/src/main/java/com/ultreon/devices/core/laptop/server/ServerLaptop.java b/common/src/main/java/dev/ultreon/devices/core/laptop/server/ServerLaptop.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/core/laptop/server/ServerLaptop.java rename to common/src/main/java/dev/ultreon/devices/core/laptop/server/ServerLaptop.java index 528c8ed12..c28ef3048 100644 --- a/common/src/main/java/com/ultreon/devices/core/laptop/server/ServerLaptop.java +++ b/common/src/main/java/dev/ultreon/devices/core/laptop/server/ServerLaptop.java @@ -1,10 +1,8 @@ -package com.ultreon.devices.core.laptop.server; +package dev.ultreon.devices.core.laptop.server; -import com.ultreon.devices.core.laptop.common.S2CUpdatePacket; -import com.ultreon.devices.network.PacketHandler; -import kotlin.jvm.internal.MutablePropertyReference0Impl; +import dev.ultreon.devices.core.laptop.common.S2CUpdatePacket; +import dev.ultreon.devices.network.PacketHandler; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import java.util.HashMap; diff --git a/common/src/main/java/com/ultreon/devices/core/network/Connection.java b/common/src/main/java/dev/ultreon/devices/core/network/Connection.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/core/network/Connection.java rename to common/src/main/java/dev/ultreon/devices/core/network/Connection.java index 2fd9ac332..1a69852eb 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/Connection.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/Connection.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.core.network; +package dev.ultreon.devices.core.network; -import com.ultreon.devices.block.entity.RouterBlockEntity; -import com.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.block.entity.RouterBlockEntity; +import dev.ultreon.devices.debug.DebugLog; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; diff --git a/common/src/main/java/com/ultreon/devices/core/network/IDevice.java b/common/src/main/java/dev/ultreon/devices/core/network/IDevice.java similarity index 70% rename from common/src/main/java/com/ultreon/devices/core/network/IDevice.java rename to common/src/main/java/dev/ultreon/devices/core/network/IDevice.java index 30a05abb9..5a4073f64 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/IDevice.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/IDevice.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.core.network; +package dev.ultreon.devices.core.network; import java.util.UUID; diff --git a/common/src/main/java/com/ultreon/devices/core/network/NetworkDevice.java b/common/src/main/java/dev/ultreon/devices/core/network/NetworkDevice.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/core/network/NetworkDevice.java rename to common/src/main/java/dev/ultreon/devices/core/network/NetworkDevice.java index 37d2f7e51..259db9f81 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/NetworkDevice.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/NetworkDevice.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.core.network; +package dev.ultreon.devices.core.network; -import com.ultreon.devices.block.entity.NetworkDeviceBlockEntity; -import com.ultreon.devices.core.Device; +import dev.ultreon.devices.block.entity.NetworkDeviceBlockEntity; +import dev.ultreon.devices.core.Device; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; diff --git a/common/src/main/java/com/ultreon/devices/core/network/Router.java b/common/src/main/java/dev/ultreon/devices/core/network/Router.java similarity index 83% rename from common/src/main/java/com/ultreon/devices/core/network/Router.java rename to common/src/main/java/dev/ultreon/devices/core/network/Router.java index 230b1d88c..c3c92eea2 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/Router.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/Router.java @@ -1,11 +1,12 @@ -package com.ultreon.devices.core.network; +package dev.ultreon.devices.core.network; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.block.entity.NetworkDeviceBlockEntity; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.block.entity.NetworkDeviceBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; @@ -18,6 +19,9 @@ import java.util.UUID; import java.util.function.Predicate; +/** + * Author: MrCrayfish + */ public class Router { private final Map NETWORK_DEVICES = new HashMap<>(); @@ -103,7 +107,7 @@ public Collection getConnectedDevices(final Level level, TagKey device.setPos(null)); + int range = DeviceConfig.SIGNAL_RANGE.get(); for (int x = -range; x <= range; x++) { for (int y = -range; y <= range; y++) { for (int z = -range; z <= range; z++) { - BlockPos currentPos = new BlockPos(pos.getX() + x, pos.getY() + y, pos.getZ() + z); - BlockEntity blockEntity = level.getBlockEntity(currentPos); - if (blockEntity instanceof NetworkDeviceBlockEntity device) { - if (!NETWORK_DEVICES.containsKey(device.getId())) - continue; - if (device.receiveBeacon(this)) { - NETWORK_DEVICES.get(device.getId()).setPos(currentPos); - } - } + sendBeaconAt(level, x, y, z); } } } } + private void sendBeaconAt(Level level, int x, int y, int z) { + BlockPos currentPos = new BlockPos(pos.getX() + x, pos.getY() + y, pos.getZ() + z); + BlockEntity blockEntity = level.getBlockEntity(currentPos); + + if (!(blockEntity instanceof NetworkDeviceBlockEntity device) || !NETWORK_DEVICES.containsKey(device.getId())) + return; + + if (device.receiveBeacon(this)) { + ResourceLocation id = BuiltInRegistries.BLOCK_ENTITY_TYPE.getKey(device.getType()); + NETWORK_DEVICES.get(device.getId()).setPos(currentPos); + } + } + public UUID getId() { if (routerId == null) { routerId = UUID.randomUUID(); @@ -153,9 +163,7 @@ public CompoundTag toTag(boolean includePos) { tag.putUUID("id", getId()); ListTag deviceList = new ListTag(); - NETWORK_DEVICES.forEach((id, device) -> { - deviceList.add(device.toTag(includePos)); - }); + NETWORK_DEVICES.forEach((id, device) -> deviceList.add(device.toTag(includePos))); tag.put("network_devices", deviceList); return tag; @@ -181,4 +189,9 @@ public boolean equals(Object obj) { return false; return router.getId().equals(getId()); } + + @Override + public int hashCode() { + return this.getId().hashCode(); + } } diff --git a/common/src/main/java/com/ultreon/devices/core/network/TrayItemWifi.java b/common/src/main/java/dev/ultreon/devices/core/network/TrayItemWifi.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/core/network/TrayItemWifi.java rename to common/src/main/java/dev/ultreon/devices/core/network/TrayItemWifi.java index 9985e80cc..89016ace3 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/TrayItemWifi.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/TrayItemWifi.java @@ -1,24 +1,22 @@ -package com.ultreon.devices.core.network; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.ItemList; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.block.entity.DeviceBlockEntity; -import com.ultreon.devices.block.entity.RouterBlockEntity; -import com.ultreon.devices.core.Device; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.network.task.TaskConnect; -import com.ultreon.devices.core.network.task.TaskPing; -import com.ultreon.devices.object.TrayItem; +package dev.ultreon.devices.core.network; + +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.ItemList; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.block.entity.DeviceBlockEntity; +import dev.ultreon.devices.block.entity.RouterBlockEntity; +import dev.ultreon.devices.core.Device; +import dev.ultreon.devices.core.network.task.TaskConnect; +import dev.ultreon.devices.core.network.task.TaskPing; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.TrayItem; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -38,7 +36,7 @@ public class TrayItemWifi extends TrayItem { private Strength strength = Strength.NONE; public TrayItemWifi() { - super(Icons.WIFI_NONE, Devices.id("wifi")); + super(Icons.WIFI_NONE, UltreonDevicesMod.id("wifi")); } private static Layout createWifiMenu(TrayItem item) { @@ -55,7 +53,7 @@ public void render(GuiGraphics graphics, Device device, Minecraft mc, int x, int if (device.getPos() == null) return; - BlockPos laptopPos = Laptop.getPos(); + BlockPos laptopPos = MineOS.getOpened().getPos(); assert laptopPos != null; double distance = Math.sqrt(device.getPos().distToCenterSqr(laptopPos.getX() + 0.5, laptopPos.getY() + 0.5, laptopPos.getZ() + 0.5)); if (distance > 20) { @@ -68,7 +66,7 @@ public void render(GuiGraphics graphics, Device device, Minecraft mc, int x, int } }); itemListRouters.sortBy((o1, o2) -> { - BlockPos laptopPos = Laptop.getPos(); + BlockPos laptopPos = MineOS.getOpened().getPos(); assert o1.getPos() != null; assert laptopPos != null; double distance1 = Math.sqrt(o1.getPos().distToCenterSqr(laptopPos.getX() + 0.5, laptopPos.getY() + 0.5, laptopPos.getZ() + 0.5)); @@ -82,11 +80,11 @@ public void render(GuiGraphics graphics, Device device, Minecraft mc, int x, int buttonConnect.setClickListener((mouseX, mouseY, mouseButton) -> { if (mouseButton == 0) { if (itemListRouters.getSelectedItem() != null) { - TaskConnect connect = new TaskConnect(Laptop.getPos(), itemListRouters.getSelectedItem().getPos()); + TaskConnect connect = new TaskConnect(MineOS.getOpened().getPos(), itemListRouters.getSelectedItem().getPos()); connect.setCallback((tag, success) -> { if (success) { item.setIcon(Icons.WIFI_HIGH); - Laptop.getSystem().closeContext(); + MineOS.getOpened().closeContext(); } }); TaskManager.sendTask(connect); @@ -102,11 +100,11 @@ private static List getRouters() { List routers = new ArrayList<>(); Level level = Minecraft.getInstance().level; - if (Laptop.isWorldLess()) { + if (MineOS.getOpened().isWorldLess()) { return new ArrayList<>(); } - BlockPos laptopPos = Laptop.getPos(); + BlockPos laptopPos = MineOS.getOpened().getPos(); int range = DeviceConfig.SIGNAL_RANGE.get(); for (int y = -range; y < range + 1; y++) { @@ -128,10 +126,10 @@ private static List getRouters() { @Override public void init() { this.setClickListener((mouseX, mouseY, mouseButton) -> { - if (Laptop.getSystem().hasContext()) { - Laptop.getSystem().closeContext(); + if (MineOS.getOpened().hasContext()) { + MineOS.getOpened().closeContext(); } else { - Laptop.getSystem().openContext(createWifiMenu(this), mouseX - 100, mouseY - 100); + MineOS.getOpened().openContext(createWifiMenu(this), mouseX - 100, mouseY - 100); } }); @@ -147,7 +145,7 @@ public void tick() { } private void runPingTask() { - TaskPing task = new TaskPing(Laptop.getPos()); + TaskPing task = new TaskPing(MineOS.getOpened().getPos()); task.setCallback((tag, success) -> { if (success) { assert tag != null; diff --git a/common/src/main/java/com/ultreon/devices/core/network/task/TaskConnect.java b/common/src/main/java/dev/ultreon/devices/core/network/task/TaskConnect.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/core/network/task/TaskConnect.java rename to common/src/main/java/dev/ultreon/devices/core/network/task/TaskConnect.java index 56f467d6f..1248dbc1a 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/task/TaskConnect.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/task/TaskConnect.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.core.network.task; +package dev.ultreon.devices.core.network.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.NetworkDeviceBlockEntity; -import com.ultreon.devices.block.entity.RouterBlockEntity; -import com.ultreon.devices.core.network.Router; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.NetworkDeviceBlockEntity; +import dev.ultreon.devices.block.entity.RouterBlockEntity; +import dev.ultreon.devices.core.network.Router; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/core/network/task/TaskGetDevices.java b/common/src/main/java/dev/ultreon/devices/core/network/task/TaskGetDevices.java similarity index 52% rename from common/src/main/java/com/ultreon/devices/core/network/task/TaskGetDevices.java rename to common/src/main/java/dev/ultreon/devices/core/network/task/TaskGetDevices.java index f3c3dffb9..13f4a54a9 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/task/TaskGetDevices.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/task/TaskGetDevices.java @@ -1,18 +1,21 @@ -package com.ultreon.devices.core.network.task; +package dev.ultreon.devices.core.network.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.NetworkDeviceBlockEntity; -import com.ultreon.devices.core.network.NetworkDevice; -import com.ultreon.devices.core.network.Router; +import com.mojang.datafixers.util.Either; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.NetworkDeviceBlockEntity; +import dev.ultreon.devices.core.network.NetworkDevice; +import dev.ultreon.devices.core.network.Router; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.chunk.LevelChunk; import java.util.Collection; @@ -20,6 +23,7 @@ * @author MrCrayfish */ public class TaskGetDevices extends Task { + private TagKey> targetTypes; private BlockPos devicePos; private BlockEntityType targetType; @@ -41,6 +45,12 @@ public TaskGetDevices(BlockPos devicePos, BlockEntityType targetType) { this.targetType = targetType; } + public TaskGetDevices(BlockPos devicePos, TagKey> targetTypes) { + this(); + this.devicePos = devicePos; + this.targetTypes = targetTypes; + } + /** * @deprecated Use {@link #TaskGetDevices(BlockPos, BlockEntityType)} instead. */ @@ -55,46 +65,65 @@ public void prepareRequest(CompoundTag tag) { tag.putLong("devicePos", devicePos.asLong()); if (targetType != null) { tag.putInt("targetType", BuiltInRegistries.BLOCK_ENTITY_TYPE.getId(targetType)); + } else if (targetTypes != null) { + tag.putString("targetTypes", this.targetTypes.location().toString()); } } @Override public void processRequest(CompoundTag tag, Level level, Player player) { BlockPos devicePos = BlockPos.of(tag.getLong("devicePos")); - BlockEntityType targetType; - int typeId = tag.getInt("targetType"); - if (typeId < 0) { - this.reason = "Invalid target ID received: " + typeId; - return; + Either, TagKey>> targetTypes = null; + if (tag.contains("targetType", Tag.TAG_INT)) { + int typeId = tag.getInt("targetType"); + if (typeId < 0) { + this.reason = "Invalid target ID received: " + typeId; + return; + } + + targetTypes = Either.left(BuiltInRegistries.BLOCK_ENTITY_TYPE.byId(typeId)); + } else if (tag.contains("targetTypes", Tag.TAG_STRING)) { + ResourceLocation tagKeyId = ResourceLocation.tryParse(tag.getString("targetTypes")); + var tagPair = BuiltInRegistries.BLOCK_ENTITY_TYPE.getTags() + .filter(pair -> pair.getFirst().location().equals(tagKeyId)) + .findFirst(); + + if (tagPair.isPresent()) { + targetTypes = Either.right(tagPair.get().getFirst()); + } } - targetType = BuiltInRegistries.BLOCK_ENTITY_TYPE.byId(typeId); + BlockEntity blockEntity = level.getBlockEntity(devicePos); - BlockEntity tileEntity = level.getChunkAt(devicePos).getBlockEntity(devicePos, LevelChunk.EntityCreationType.IMMEDIATE); - - if (!(tileEntity instanceof NetworkDeviceBlockEntity tileEntityNetworkDevice)) { + if (!(blockEntity instanceof NetworkDeviceBlockEntity networkDevice)) { this.reason = "Not a network device"; return; } - if (!tileEntityNetworkDevice.isConnected()) { + if (!networkDevice.isConnected()) { this.reason = "Not connected to router"; return; } - Router router = tileEntityNetworkDevice.getRouter(); + Router router = networkDevice.getRouter(); if (router == null) { this.reason = "No internet access"; return; } - this.foundDevices = targetType != null ? router.getConnectedDevices(level) : router.getConnectedDevices(level, targetType); + if (targetTypes != null) { + targetTypes.ifLeft(type -> this.foundDevices = router.getConnectedDevices(level, type)); + targetTypes.ifRight(tagKey -> this.foundDevices = router.getConnectedDevices(level, tagKey)); + } else { + this.foundDevices = router.getConnectedDevices(level); + } + this.setSuccessful(); } @Override public void prepareResponse(CompoundTag tag) { - if (this.isSucessful()) { + if (this.isSuccessful()) { ListTag deviceList = new ListTag(); foundDevices.forEach(device -> deviceList.add(device.toTag(true))); tag.put("network_devices", deviceList); diff --git a/common/src/main/java/com/ultreon/devices/core/network/task/TaskPing.java b/common/src/main/java/dev/ultreon/devices/core/network/task/TaskPing.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/core/network/task/TaskPing.java rename to common/src/main/java/dev/ultreon/devices/core/network/task/TaskPing.java index 57731d06b..d10e0f7f7 100644 --- a/common/src/main/java/com/ultreon/devices/core/network/task/TaskPing.java +++ b/common/src/main/java/dev/ultreon/devices/core/network/task/TaskPing.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.core.network.task; +package dev.ultreon.devices.core.network.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.NetworkDeviceBlockEntity; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.NetworkDeviceBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; @@ -43,7 +43,7 @@ public void processRequest(CompoundTag tag, Level level, Player player) { @Override public void prepareResponse(CompoundTag tag) { - if (this.isSucessful()) { + if (this.isSuccessful()) { tag.putInt("strength", strength); } } diff --git a/common/src/main/java/com/ultreon/devices/core/print/task/TaskPrint.java b/common/src/main/java/dev/ultreon/devices/core/print/task/TaskPrint.java similarity index 86% rename from common/src/main/java/com/ultreon/devices/core/print/task/TaskPrint.java rename to common/src/main/java/dev/ultreon/devices/core/print/task/TaskPrint.java index 8ef77698d..b18fbe6d0 100644 --- a/common/src/main/java/com/ultreon/devices/core/print/task/TaskPrint.java +++ b/common/src/main/java/dev/ultreon/devices/core/print/task/TaskPrint.java @@ -1,11 +1,11 @@ -package com.ultreon.devices.core.print.task; +package dev.ultreon.devices.core.print.task; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.NetworkDeviceBlockEntity; -import com.ultreon.devices.block.entity.PrinterBlockEntity; -import com.ultreon.devices.core.network.NetworkDevice; -import com.ultreon.devices.core.network.Router; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.NetworkDeviceBlockEntity; +import dev.ultreon.devices.block.entity.PrinterBlockEntity; +import dev.ultreon.devices.core.network.NetworkDevice; +import dev.ultreon.devices.core.network.Router; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/core/task/TaskInstallApp.java b/common/src/main/java/dev/ultreon/devices/core/task/TaskInstallApp.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/core/task/TaskInstallApp.java rename to common/src/main/java/dev/ultreon/devices/core/task/TaskInstallApp.java index ecac0b9ff..be36f5d32 100644 --- a/common/src/main/java/com/ultreon/devices/core/task/TaskInstallApp.java +++ b/common/src/main/java/dev/ultreon/devices/core/task/TaskInstallApp.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.core.task; +package dev.ultreon.devices.core.task; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -56,7 +56,7 @@ public void processRequest(CompoundTag tag, Level level, Player player) { if (tag.getBoolean("install")) { for (int i = 0; i < list.size(); i++) { if (list.getString(i).equals(appId)) { - Devices.LOGGER.warn("Found duplicate, noping out"); + UltreonDevicesMod.LOGGER.warn("Found duplicate, noping out"); return; } } @@ -74,8 +74,8 @@ public void processRequest(CompoundTag tag, Level level, Player player) { } systemData.put("InstalledApps", list); } - if (!this.isSucessful()) { - Devices.LOGGER.info("Installing {} unsuccessful", appId); + if (!this.isSuccessful()) { + UltreonDevicesMod.LOGGER.info("Installing {} unsuccessful", appId); } } diff --git a/common/src/main/java/com/ultreon/devices/debug/DebugFlags.java b/common/src/main/java/dev/ultreon/devices/debug/DebugFlags.java similarity index 70% rename from common/src/main/java/com/ultreon/devices/debug/DebugFlags.java rename to common/src/main/java/dev/ultreon/devices/debug/DebugFlags.java index b56044b5c..91cbe2933 100644 --- a/common/src/main/java/com/ultreon/devices/debug/DebugFlags.java +++ b/common/src/main/java/dev/ultreon/devices/debug/DebugFlags.java @@ -1,5 +1,8 @@ -package com.ultreon.devices.debug; +package dev.ultreon.devices.debug; +/** + * The DebugFlags class contains boolean flags for controlling debugging options. + */ public class DebugFlags { public static final boolean DUMP_APP_ICON_ATLAS = true; public static final boolean LOG_APP_ICON_STITCHES = true; diff --git a/common/src/main/java/dev/ultreon/devices/debug/DebugLog.java b/common/src/main/java/dev/ultreon/devices/debug/DebugLog.java new file mode 100644 index 000000000..fa942b602 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/debug/DebugLog.java @@ -0,0 +1,58 @@ +package dev.ultreon.devices.debug; + +import dev.architectury.platform.Platform; +import org.intellij.lang.annotations.PrintFormat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Objects; + +/** + * The DebugLog class provides logging functionality for development purposes. + * Messages logged using DebugLog are only displayed in the development environment. + */ +public class DebugLog { + private static final Logger LOGGER = LoggerFactory.getLogger("Devices : Debugger"); + + /** + * Logs a message in the development environment. + * + * @param message the message to log + */ + public static void log(String message) { + if (Platform.isDevelopmentEnvironment()) { + LOGGER.info(message); + } + } + + /** + * Logs a message in the development environment. + * + * @param message the message to log + */ + public static void log(Object... message) { + log(String.join(" ", Arrays.stream(message).map(Objects::toString).toList())); + } + + /** + * Logs a message in the development environment. + * + * @param message the message to log + */ + public static void log(@PrintFormat String message, Object... args) { + log(String.format(message, args)); + } + + /** + * Logs the time along with a message in the development environment. + * + * @param ticks the number of ticks + * @param message the message to log + */ + public static void logTime(long ticks, String message) { + if (Platform.isDevelopmentEnvironment()) { + LOGGER.info("(@" + ticks + " ticks) " + message); + } + } +} diff --git a/common/src/main/java/com/ultreon/devices/debug/DebugUtils.java b/common/src/main/java/dev/ultreon/devices/debug/DebugUtils.java similarity index 72% rename from common/src/main/java/com/ultreon/devices/debug/DebugUtils.java rename to common/src/main/java/dev/ultreon/devices/debug/DebugUtils.java index 01a8fa066..c5afc35e7 100644 --- a/common/src/main/java/com/ultreon/devices/debug/DebugUtils.java +++ b/common/src/main/java/dev/ultreon/devices/debug/DebugUtils.java @@ -1,5 +1,6 @@ -package com.ultreon.devices.debug; +package dev.ultreon.devices.debug; +import dev.architectury.platform.Platform; import net.minecraft.resources.ResourceLocation; import java.io.File; @@ -7,8 +8,13 @@ import java.io.IOException; import java.io.OutputStream; +/** + * The DebugUtils class provides utility methods for debugging purposes. + */ public class DebugUtils { public static void dump(DumpType type, ResourceLocation resource, DumpWriter dumpFunc) throws IOException { + if (!Platform.isDevelopmentEnvironment()) return; + File namespaceFile = new File("debug/dump/" + type.name().toLowerCase(), resource.getNamespace()); File outputFile = new File(namespaceFile, resource.getPath()); File outputDir = outputFile.getParentFile(); @@ -20,6 +26,10 @@ public static void dump(DumpType type, ResourceLocation resource, DumpWriter dum } } + /** + * The DumpWriter interface is a functional interface + * that represents a writer capable of dumping data to an OutputStream. + */ @FunctionalInterface public interface DumpWriter { void dump(OutputStream stream) throws IOException; diff --git a/common/src/main/java/com/ultreon/devices/debug/DumpType.java b/common/src/main/java/dev/ultreon/devices/debug/DumpType.java similarity index 50% rename from common/src/main/java/com/ultreon/devices/debug/DumpType.java rename to common/src/main/java/dev/ultreon/devices/debug/DumpType.java index 735c1feb4..19d476a4e 100644 --- a/common/src/main/java/com/ultreon/devices/debug/DumpType.java +++ b/common/src/main/java/dev/ultreon/devices/debug/DumpType.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.debug; +package dev.ultreon.devices.debug; public enum DumpType { ATLAS diff --git a/common/src/main/java/dev/ultreon/devices/device/AudioDeviceImpl.java b/common/src/main/java/dev/ultreon/devices/device/AudioDeviceImpl.java new file mode 100644 index 000000000..18a91729b --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/device/AudioDeviceImpl.java @@ -0,0 +1,29 @@ +package dev.ultreon.devices.device; + +import dev.ultreon.devices.api.device.AudioDevice; +import net.minecraft.client.Minecraft; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; + +import static net.minecraft.client.resources.sounds.SimpleSoundInstance.forUI; + +public class AudioDeviceImpl implements AudioDevice { + @Override + public void playSound(String soundId) { + SoundEvent sound = BuiltInRegistries.SOUND_EVENT.get(new ResourceLocation(soundId)); + if (sound == null) return; + + Minecraft.getInstance().getSoundManager().play(forUI(sound, 1.0F, 1.0F)); + } + + @Override + public boolean isPresent() { + return true; + } + + @Override + public boolean isConnected() { + return true; + } +} diff --git a/common/src/main/java/dev/ultreon/devices/device/FrameBuffer.java b/common/src/main/java/dev/ultreon/devices/device/FrameBuffer.java new file mode 100644 index 000000000..4f530c63e --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/device/FrameBuffer.java @@ -0,0 +1,93 @@ +package dev.ultreon.devices.device; + +import com.mojang.blaze3d.platform.NativeImage; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; + +import static org.lwjgl.opengl.EXTFramebufferObject.*; +import static org.lwjgl.opengl.GL30.*; + +public class FrameBuffer { + private final int id; + private final DynamicTexture texture; + + public FrameBuffer(int width, int height) { + this.texture = new DynamicTexture(new NativeImage(width, height, true)); + + this.id = glGenFramebuffersEXT(); + + glBindFramebufferEXT(GL_FRAMEBUFFER, this.id); + glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture.getId(), 0); + int result = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); + if (result != GL_FRAMEBUFFER_COMPLETE_EXT) { + glBindFramebufferEXT(GL_FRAMEBUFFER, 0); + glDeleteFramebuffersEXT(this.id); + + throw new RuntimeException("Failed to create framebuffer: " + result); + } + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + } + + public int getId() { + return this.id; + } + + /** + * Binds the FBO and sets glViewport to the texture region width/height. + */ + public void begin() { + if (id == 0) + throw new IllegalStateException("Can't use FBO as it has been destroyed."); + glViewport(0, 0, getWidth(), getHeight()); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id); + } + + /** + * Unbinds the FBO and resets glViewport to the display size. + */ + public void end() { + if (id==0) + return; + glViewport(0, 0, Minecraft.getInstance().getWindow().getWidth(), Minecraft.getInstance().getWindow().getHeight()); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + } + + private int getWidth() { + NativeImage pixels = texture.getPixels(); + return pixels != null ? pixels.getHeight() : 0; + } + + private int getHeight() { + NativeImage pixels = texture.getPixels(); + return pixels != null ? pixels.getWidth() : 0; + } + + public void resize(int width, int height) { + this.texture.setPixels(new NativeImage(width, height, true)); + this.texture.upload(); + } + + public void delete() { + glDeleteFramebuffersEXT(this.id); + } + + public DynamicTexture getTexture() { + return texture; + } + + public float getU() { + return 0; + } + + public float getV() { + return 1f; + } + + public float getU2() { + return 1f; + } + + public float getV2() { + return 0; + } +} diff --git a/common/src/main/java/com/ultreon/devices/entity/SeatEntity.java b/common/src/main/java/dev/ultreon/devices/entity/SeatEntity.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/entity/SeatEntity.java rename to common/src/main/java/dev/ultreon/devices/entity/SeatEntity.java index d9782e6de..d66952811 100644 --- a/common/src/main/java/com/ultreon/devices/entity/SeatEntity.java +++ b/common/src/main/java/dev/ultreon/devices/entity/SeatEntity.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.entity; +package dev.ultreon.devices.entity; -import com.ultreon.devices.init.DeviceEntities; +import dev.ultreon.devices.init.DeviceEntities; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -10,6 +10,7 @@ import net.minecraft.world.entity.*; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; +import org.jetbrains.annotations.NotNull; import java.util.List; @@ -68,6 +69,7 @@ public void tick() } + @Override public LivingEntity getControllingPassenger() { List list = this.getPassengers(); @@ -75,7 +77,7 @@ public LivingEntity getControllingPassenger() } @Override - public Packet getAddEntityPacket() { + public @NotNull Packet getAddEntityPacket() { return new ClientboundAddEntityPacket(this); } diff --git a/common/src/main/java/com/ultreon/devices/entity/renderer/SeatEntityRenderer.java b/common/src/main/java/dev/ultreon/devices/entity/renderer/SeatEntityRenderer.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/entity/renderer/SeatEntityRenderer.java rename to common/src/main/java/dev/ultreon/devices/entity/renderer/SeatEntityRenderer.java index 723cf767b..8a71e48ee 100644 --- a/common/src/main/java/com/ultreon/devices/entity/renderer/SeatEntityRenderer.java +++ b/common/src/main/java/dev/ultreon/devices/entity/renderer/SeatEntityRenderer.java @@ -1,13 +1,13 @@ -package com.ultreon.devices.entity.renderer; +package dev.ultreon.devices.entity.renderer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.entity.ThrownItemRenderer; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; +import org.jetbrains.annotations.NotNull; @Environment(EnvType.CLIENT) public class SeatEntityRenderer @@ -18,7 +18,7 @@ public SeatEntityRenderer(EntityRendererProvider.Context context) { } @Override - public ResourceLocation getTextureLocation(T entity) { + public @NotNull ResourceLocation getTextureLocation(T entity) { return TextureAtlas.LOCATION_BLOCKS; } } \ No newline at end of file diff --git a/common/src/main/java/com/ultreon/devices/event/WorldDataHandler.java b/common/src/main/java/dev/ultreon/devices/event/WorldDataHandler.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/event/WorldDataHandler.java rename to common/src/main/java/dev/ultreon/devices/event/WorldDataHandler.java index a96b1f08d..79fb5f926 100644 --- a/common/src/main/java/com/ultreon/devices/event/WorldDataHandler.java +++ b/common/src/main/java/dev/ultreon/devices/event/WorldDataHandler.java @@ -1,7 +1,8 @@ -package com.ultreon.devices.event; +package dev.ultreon.devices.event; -import com.ultreon.devices.api.WorldSavedData; +import dev.ultreon.devices.api.WorldSavedData; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtAccounter; import net.minecraft.nbt.NbtIo; import net.minecraft.world.level.storage.LevelResource; @@ -58,7 +59,7 @@ private void loadData(File modData, String fileName, WorldSavedData data) { return; } try { - CompoundTag nbt = NbtIo.readCompressed(dataFile); + CompoundTag nbt = NbtIo.readCompressed(dataFile.toPath(), NbtAccounter.unlimitedHeap()); data.load(nbt); } catch (IOException e) { throw new RuntimeException(e); @@ -74,7 +75,7 @@ private void saveData(File modData, String fileName, WorldSavedData data) { CompoundTag nbt = new CompoundTag(); data.save(nbt); - NbtIo.writeCompressed(nbt, dataFile); + NbtIo.writeCompressed(nbt, dataFile.toPath()); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/common/src/main/java/com/ultreon/devices/exception/WorldLessException.java b/common/src/main/java/dev/ultreon/devices/exception/WorldLessException.java similarity index 77% rename from common/src/main/java/com/ultreon/devices/exception/WorldLessException.java rename to common/src/main/java/dev/ultreon/devices/exception/WorldLessException.java index 88b2822e5..4984116bf 100644 --- a/common/src/main/java/com/ultreon/devices/exception/WorldLessException.java +++ b/common/src/main/java/dev/ultreon/devices/exception/WorldLessException.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.exception; +package dev.ultreon.devices.exception; public class WorldLessException extends Exception { public WorldLessException(String message) { diff --git a/common/src/main/java/com/ultreon/devices/gui/GuiButtonClose.java b/common/src/main/java/dev/ultreon/devices/gui/GuiButtonClose.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/gui/GuiButtonClose.java rename to common/src/main/java/dev/ultreon/devices/gui/GuiButtonClose.java index b84092726..6b90a6db9 100644 --- a/common/src/main/java/com/ultreon/devices/gui/GuiButtonClose.java +++ b/common/src/main/java/dev/ultreon/devices/gui/GuiButtonClose.java @@ -1,19 +1,16 @@ -package com.ultreon.devices.gui; +package dev.ultreon.devices.gui; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.core.Window; +import dev.ultreon.devices.mineos.client.Window; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.ComponentContents; -import net.minecraft.network.chat.MutableComponent; import org.jetbrains.annotations.NotNull; public class GuiButtonClose extends Button { public GuiButtonClose(int x, int y) { super(x, y, 11, 11, Component.literal(""), - (button) -> { }, (output)-> MutableComponent.create(ComponentContents.EMPTY)); + (button) -> { }, (output)-> Component.empty()); } @Override @@ -33,6 +30,7 @@ public void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, } } + @Override public boolean isHovered() { return isHovered; } diff --git a/common/src/main/java/dev/ultreon/devices/impl/LoggerImpl.java b/common/src/main/java/dev/ultreon/devices/impl/LoggerImpl.java new file mode 100644 index 000000000..fb81a0568 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/impl/LoggerImpl.java @@ -0,0 +1,88 @@ +package dev.ultreon.devices.impl; + +import dev.ultreon.devices.api.Logger; +import org.slf4j.LoggerFactory; + +public class LoggerImpl implements Logger { + public final org.slf4j.Logger logger = LoggerFactory.getLogger("DevicesMod"); + + @Override + public void debug(String message) { + logger.debug(message); + } + + @Override + public void debug(String message, Throwable t) { + logger.debug(message, t); + } + + @Override + public void debug(String message, Object o) { + logger.debug(message, o); + } + + @Override + public void debug(String message, Object o1, Object o2) { + logger.debug(message, o1, o2); + } + + @Override + public void info(String message) { + logger.info(message); + } + + @Override + public void info(String message, Throwable t) { + logger.info(message, t); + } + + @Override + public void info(String message, Object o) { + logger.info(message, o); + } + + @Override + public void info(String message, Object o1, Object o2) { + logger.info(message, o1, o2); + } + + @Override + public void warn(String message) { + logger.warn(message); + } + + @Override + public void warn(String message, Throwable t) { + logger.warn(message, t); + } + + @Override + public void warn(String message, Object o) { + logger.warn(message, o); + } + + @Override + public void warn(String message, Object o1, Object o2) { + logger.warn(message, o1, o2); + } + + @Override + public void error(String message) { + logger.error(message); + } + + @Override + public void error(String message, Throwable t) { + logger.error(message, t); + } + + @Override + public void error(String message, Object o) { + logger.error(message, o); + } + + @Override + public void error(String message, Object o1, Object o2) { + logger.error(message, o1, o2); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/impl/OsLoadContext.java b/common/src/main/java/dev/ultreon/devices/impl/OsLoadContext.java new file mode 100644 index 000000000..789d9684d --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/impl/OsLoadContext.java @@ -0,0 +1,19 @@ +package dev.ultreon.devices.impl; + +import java.util.UUID; + +public record OsLoadContext(UUID player) { + private static final ThreadLocal instance = new ThreadLocal<>(); + + public static OsLoadContext get() { + if (instance.get() == null) throw new IllegalStateException("OsLoadContext not initialized"); + + return instance.get(); + } + + public static void inContext(OsLoadContext context, Runnable runnable) { + instance.set(context); + runnable.run(); + instance.remove(); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/impl/storage/FileStorage.java b/common/src/main/java/dev/ultreon/devices/impl/storage/FileStorage.java new file mode 100644 index 000000000..2ab4ac12c --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/impl/storage/FileStorage.java @@ -0,0 +1,24 @@ +package dev.ultreon.devices.impl.storage; + +import dev.ultreon.devices.api.storage.DataStorage; +import dev.ultreon.devices.api.storage.FileHandle; + +import java.util.UUID; + +public class FileStorage implements DataStorage { + private final UUID player; + + public FileStorage(UUID player) { + this.player = player; + } + + @Override + public FileHandle get(String path) { + return new FileStorageHandle(path, player); + } + + @Override + public String id() { + return "resource-path"; + } +} diff --git a/common/src/main/java/dev/ultreon/devices/impl/storage/FileStorageHandle.java b/common/src/main/java/dev/ultreon/devices/impl/storage/FileStorageHandle.java new file mode 100644 index 000000000..bb594d3e8 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/impl/storage/FileStorageHandle.java @@ -0,0 +1,153 @@ +package dev.ultreon.devices.impl.storage; + +import com.google.gson.Gson; +import dev.ultreon.devices.api.SystemException; +import dev.ultreon.devices.api.storage.FileHandle; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtAccounter; +import net.minecraft.nbt.NbtIo; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.List; +import java.util.UUID; +import java.util.stream.Stream; + +public class FileStorageHandle implements FileHandle { + private final String filePath; + private final Path path; + private final UUID player; + + public FileStorageHandle(String path, UUID player) { + this.player = player; + if (!path.startsWith("/")) throw new IllegalArgumentException("Path must be absolute"); + if (path.equals("/")) { + this.filePath = "/"; + this.path = Path.of("."); + return; + } + + Path p = Path.of(path.substring(1)); + if (p.isAbsolute()) throw new IllegalArgumentException("Illegal path: " + path); + + this.filePath = path; + this.path = p; + } + + public Path toPath() { + return path; + } + + @Override + public String path() { + return filePath; + } + + @Override + public InputStream read() throws IOException { + return Files.newInputStream(path, StandardOpenOption.READ); + } + + @Override + public OutputStream write() throws IOException { + return Files.newOutputStream(path, StandardOpenOption.CREATE, StandardOpenOption.WRITE); + } + + @Override + public T read(Class clazz) throws IOException { + return new Gson().fromJson(readString(), clazz); + } + + @Override + public void write(T object) throws IOException { + writeString(new Gson().toJson(object)); + } + + @Override + public CompoundTag readNbt() throws IOException { + return NbtIo.readCompressed(path, NbtAccounter.unlimitedHeap()); + } + + @Override + public void writeNbt(CompoundTag ubo) throws IOException { + NbtIo.writeCompressed(ubo, path); + } + + @Override + public boolean isDirectory() { + return Files.isDirectory(path); + } + + @Override + public boolean isFile() { + return Files.isRegularFile(path); + } + + @Override + public boolean isSymbolicLink() { + return Files.isSymbolicLink(path); + } + + @Override + public long length() { + try { + return Files.size(path); + } catch (IOException e) { + throw new SystemException(e); + } + } + + @Override + public boolean isReadable() { + return Files.isReadable(path); + } + + @Override + public boolean isWritable() { + return Files.isWritable(path); + } + + @Override + public boolean isExecutable() { + return Files.isExecutable(path); + } + + @Override + public boolean exists() { + return Files.exists(path); + } + + @Override + public FileHandle get(String path) { + if (path.startsWith("/")) throw new IllegalArgumentException("Path must be relative"); + + return Storages.file(this.player).get(this.filePath + path); + } + + @Override + public void createDirs() { + try { + Files.createDirectories(path); + } catch (IOException e) { + throw new SystemException(e); + } + } + + @Override + public List listDir() { + try (Stream list = Files.list(path)) { + return list.map(path1 -> Storages.file(this.player).get(this.filePath + path1.getFileName().toString())).toList(); + } catch (IOException e) { + throw new SystemException(e); + } + } + + @Override + public String fileName() { + return path.getFileName().toString(); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/impl/storage/ResourceFileHandle.java b/common/src/main/java/dev/ultreon/devices/impl/storage/ResourceFileHandle.java new file mode 100644 index 000000000..b3c0b9363 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/impl/storage/ResourceFileHandle.java @@ -0,0 +1,95 @@ +package dev.ultreon.devices.impl.storage; + +import dev.ultreon.devices.api.storage.FileHandle; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.ReadOnlyFileSystemException; +import java.util.List; + +public class ResourceFileHandle implements FileHandle { + private final ResourceLocation path; + + public ResourceFileHandle(ResourceLocation path) { + this.path = path; + } + + @Override + public String path() { + return path.toString(); + } + + @Override + public InputStream read() throws IOException { + return Minecraft.getInstance().getResourceManager().open(toResourceLocation()); + } + + @Override + public OutputStream write() { + throw new ReadOnlyFileSystemException(); + } + + @Override + public boolean isDirectory() { + return false; + } + + @Override + public boolean isFile() { + return true; + } + + @Override + public boolean isSymbolicLink() { + return false; + } + + @Override + public long length() throws IOException { + try (InputStream read = read()) { + return read.available(); + } + } + + @Override + public boolean isReadable() { + return true; + } + + @Override + public boolean exists() { + return Minecraft.getInstance().getResourceManager().getResource(toResourceLocation()).isPresent(); + } + + @Override + public FileHandle get(String path) { + return new ResourceFileHandle(new ResourceLocation(this.path.getNamespace(), this.path.getPath() + "/" + path)); + } + + @Override + public void createDirs() { + throw new ReadOnlyFileSystemException(); + } + + @Override + public List listDir() { + return List.of(); + } + + @Override + public String fileName() { + String[] split = path.getPath().split("/"); + return split[split.length - 1]; + } + + public ResourceLocation getResourcePath() { + return path; + } + + public ResourceLocation toResourceLocation() { + return new ResourceLocation(path.getNamespace(), path.getPath()); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/impl/storage/ResourceStorage.java b/common/src/main/java/dev/ultreon/devices/impl/storage/ResourceStorage.java new file mode 100644 index 000000000..2736250d9 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/impl/storage/ResourceStorage.java @@ -0,0 +1,17 @@ +package dev.ultreon.devices.impl.storage; + +import dev.ultreon.devices.api.storage.DataStorage; +import dev.ultreon.devices.api.storage.FileHandle; +import net.minecraft.resources.ResourceLocation; + +public class ResourceStorage implements DataStorage { + @Override + public FileHandle get(String path) { + return new ResourceFileHandle(new ResourceLocation(path)); + } + + @Override + public String id() { + return "resource-path"; + } +} diff --git a/common/src/main/java/dev/ultreon/devices/impl/storage/Storages.java b/common/src/main/java/dev/ultreon/devices/impl/storage/Storages.java new file mode 100644 index 000000000..9e5da315c --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/impl/storage/Storages.java @@ -0,0 +1,17 @@ +package dev.ultreon.devices.impl.storage; + +import net.minecraft.server.level.ServerPlayer; + +import java.util.UUID; + +public class Storages { + public static final ResourceStorage RESOURCE = new ResourceStorage(); + + public static FileStorage file(ServerPlayer player) { + return new FileStorage(player.getUUID()); + } + + static FileStorage file(UUID player) { + return new FileStorage(player); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/init/DeviceBlockEntities.java b/common/src/main/java/dev/ultreon/devices/init/DeviceBlockEntities.java new file mode 100644 index 000000000..9a422a181 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceBlockEntities.java @@ -0,0 +1,25 @@ +package dev.ultreon.devices.init; + +import dev.architectury.registry.registries.Registrar; +import dev.architectury.registry.registries.RegistrySupplier; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.block.entity.*; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; + +@SuppressWarnings("ConstantConditions") +public class DeviceBlockEntities { + private static final Registrar> REGISTER = UltreonDevicesMod.REGISTRIES.get().get(Registries.BLOCK_ENTITY_TYPE); + + public static final RegistrySupplier> PAPER = REGISTER.register(UltreonDevicesMod.id("paper"), () -> BlockEntityType.Builder.of(PaperBlockEntity::new, DeviceBlocks.PAPER.get()).build(null)); + public static final RegistrySupplier> LAPTOP = REGISTER.register(UltreonDevicesMod.id("laptop"), () -> BlockEntityType.Builder.of(LaptopBlockEntity::new, DeviceBlocks.getAllLaptops().toArray(new Block[]{})).build(null)); + public static final RegistrySupplier> MAC_MAX_X = REGISTER.register(UltreonDevicesMod.id("mac_max_x"), () -> BlockEntityType.Builder.of(MacMaxXBlockEntity::new, DeviceBlocks.MAC_MAX_X.get()).build(null)); + public static final RegistrySupplier> PRINTER = REGISTER.register(UltreonDevicesMod.id("printer"), () -> BlockEntityType.Builder.of(PrinterBlockEntity::new, DeviceBlocks.getAllPrinters().toArray(new Block[]{})).build(null)); + public static final RegistrySupplier> ROUTER = REGISTER.register(UltreonDevicesMod.id("router"), () -> BlockEntityType.Builder.of(RouterBlockEntity::new, DeviceBlocks.getAllRouters().toArray(new Block[]{})).build(null)); + public static final RegistrySupplier> SEAT = REGISTER.register(UltreonDevicesMod.id("seat"), () -> BlockEntityType.Builder.of(OfficeChairBlockEntity::new, DeviceBlocks.getAllOfficeChairs().toArray(new Block[]{})).build(null)); + + public static void register() { + // Marker + } +} diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceBlocks.java b/common/src/main/java/dev/ultreon/devices/init/DeviceBlocks.java similarity index 61% rename from common/src/main/java/com/ultreon/devices/init/DeviceBlocks.java rename to common/src/main/java/dev/ultreon/devices/init/DeviceBlocks.java index 419cedb33..c46c3c103 100644 --- a/common/src/main/java/com/ultreon/devices/init/DeviceBlocks.java +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceBlocks.java @@ -1,19 +1,22 @@ -package com.ultreon.devices.init; +package dev.ultreon.devices.init; -import com.ultreon.devices.Devices; -import com.ultreon.devices.block.*; -import com.ultreon.devices.util.DyeableRegistration; import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrySupplier; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.block.*; +import dev.ultreon.devices.util.DyeableRegistration; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockBehaviour.Properties; import java.util.List; import java.util.stream.Stream; public class DeviceBlocks { - private static final Registrar REGISTER = Devices.REGISTRIES.get().get(Registries.BLOCK); + private static final Registrar REGISTER = UltreonDevicesMod.REGISTRIES.get().get(Registries.BLOCK); public static void register() { } @@ -21,7 +24,7 @@ public static void register() { public static final DyeableRegistration LAPTOPS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_laptop"), () -> new LaptopBlock(color)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_laptop"), () -> new LaptopBlock(color, Properties.of().mapColor(color).strength(6f).sound(SoundType.METAL))); } @Override @@ -30,13 +33,13 @@ protected Registrar autoInit() { } }; - public static final RegistrySupplier MAC_MAX_X = REGISTER.register(Devices.id("mac_max_x"), MacMaxXBlock::new); - public static final RegistrySupplier MAC_MAX_X_PART = REGISTER.register(Devices.id("mac_max_x_part"), MacMaxXBlockPart::new); + public static final RegistrySupplier MAC_MAX_X = REGISTER.register(UltreonDevicesMod.id("mac_max_x"), () -> new MacMaxXBlock(Properties.of().mapColor(DyeColor.WHITE).strength(6f).sound(SoundType.METAL).noOcclusion().dynamicShape())); + public static final RegistrySupplier MAC_MAX_X_PART = REGISTER.register(UltreonDevicesMod.id("mac_max_x_part"), () -> new MacMaxXBlockPart(Properties.of().mapColor(DyeColor.WHITE).strength(6f).sound(SoundType.METAL))); public static final DyeableRegistration PRINTERS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_printer"), () -> new PrinterBlock(color)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_printer"), () -> new PrinterBlock(color, Properties.of().mapColor(color).strength(6f).sound(SoundType.METAL))); } @Override @@ -48,7 +51,7 @@ protected Registrar autoInit() { public static final DyeableRegistration ROUTERS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_router"), () -> new RouterBlock(color)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_router"), () -> new RouterBlock(color, Properties.of().mapColor(color).strength(6f).sound(SoundType.METAL))); } @Override @@ -60,7 +63,7 @@ protected Registrar autoInit() { public static final DyeableRegistration OFFICE_CHAIRS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_office_chair"), () -> new OfficeChairBlock(color)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_office_chair"), () -> new OfficeChairBlock(color, BlockBehaviour.Properties.of().mapColor(color))); } @Override @@ -70,7 +73,7 @@ protected Registrar autoInit() { }; - public static final RegistrySupplier PAPER = REGISTER.register(Devices.id("paper"), PaperBlock::new); + public static final RegistrySupplier PAPER = REGISTER.register(UltreonDevicesMod.id("paper"), () -> new PaperBlock(Properties.of().noCollission().instabreak().noOcclusion().noLootTable())); public static Stream getAllBlocks() { diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceCreativeTabs.java b/common/src/main/java/dev/ultreon/devices/init/DeviceCreativeTabs.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/init/DeviceCreativeTabs.java rename to common/src/main/java/dev/ultreon/devices/init/DeviceCreativeTabs.java index 2a6ad4588..2822a8133 100644 --- a/common/src/main/java/com/ultreon/devices/init/DeviceCreativeTabs.java +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceCreativeTabs.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.init; +package dev.ultreon.devices.init; -import com.ultreon.devices.Devices; import dev.architectury.registry.CreativeTabRegistry; -import dev.architectury.registry.registries.DeferredRegister; import dev.architectury.registry.registries.Registrar; +import dev.ultreon.devices.UltreonDevicesMod; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -12,7 +11,7 @@ import net.minecraft.world.item.ItemStack; public class DeviceCreativeTabs { - private static final Registrar REGISTER = Devices.REGISTRIES.get().get(Registries.CREATIVE_MODE_TAB); + private static final Registrar REGISTER = UltreonDevicesMod.REGISTRIES.get().get(Registries.CREATIVE_MODE_TAB); public static void register() { } diff --git a/common/src/main/java/dev/ultreon/devices/init/DeviceEntities.java b/common/src/main/java/dev/ultreon/devices/init/DeviceEntities.java new file mode 100644 index 000000000..5fbafaf62 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceEntities.java @@ -0,0 +1,19 @@ +package dev.ultreon.devices.init; + +import dev.architectury.registry.registries.Registrar; +import dev.architectury.registry.registries.RegistrySupplier; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.entity.SeatEntity; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; + +public class DeviceEntities { + private static final Registrar> REGISTER = UltreonDevicesMod.REGISTRIES.get().get(Registries.ENTITY_TYPE); + + public static final RegistrySupplier> SEAT = REGISTER.register(UltreonDevicesMod.id("seat"), () -> EntityType.Builder.of(SeatEntity::new, MobCategory.MISC).sized(0.5f, 1.975f).clientTrackingRange(10).noSummon().build(UltreonDevicesMod.id("seat").toString())); + + public static void register() { + + } +} diff --git a/common/src/main/java/dev/ultreon/devices/init/DeviceEntityRenderers.java b/common/src/main/java/dev/ultreon/devices/init/DeviceEntityRenderers.java new file mode 100644 index 000000000..04ea13f19 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceEntityRenderers.java @@ -0,0 +1,14 @@ +package dev.ultreon.devices.init; + +import dev.architectury.registry.client.level.entity.EntityRendererRegistry; +import dev.ultreon.devices.entity.renderer.SeatEntityRenderer; + +public class DeviceEntityRenderers { + static { + EntityRendererRegistry.register(DeviceEntities.SEAT::get, SeatEntityRenderer::new); + } + + public static void register() { + + } +} diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceItems.java b/common/src/main/java/dev/ultreon/devices/init/DeviceItems.java similarity index 60% rename from common/src/main/java/com/ultreon/devices/init/DeviceItems.java rename to common/src/main/java/dev/ultreon/devices/init/DeviceItems.java index 8161e4762..b82753db6 100644 --- a/common/src/main/java/com/ultreon/devices/init/DeviceItems.java +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceItems.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.init; +package dev.ultreon.devices.init; -import com.ultreon.devices.Devices; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.item.*; -import com.ultreon.devices.util.DyeableRegistration; import dev.architectury.platform.Platform; import dev.architectury.registry.registries.Registrar; import dev.architectury.registry.registries.RegistrySupplier; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.item.*; +import dev.ultreon.devices.util.DyeableRegistration; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -22,13 +22,13 @@ @SuppressWarnings("unused") public class DeviceItems { - private static final Registrar REGISTER = Devices.REGISTRIES.get().get(Registries.ITEM); + private static final Registrar REGISTER = UltreonDevicesMod.REGISTRIES.get().get(Registries.ITEM); // Laptops public static final DyeableRegistration LAPTOPS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_laptop"), () -> new ColoredDeviceItem(DeviceBlocks.LAPTOPS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.COMPUTER)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_laptop"), () -> new ColoredDeviceItem(DeviceBlocks.LAPTOPS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.COMPUTER)); } @Override @@ -38,7 +38,7 @@ protected Registrar autoInit() { }; // Custom Computers - public static final RegistrySupplier MAC_MAX_X = REGISTER.register(Devices.id("mac_max_x"), () -> new DeviceItem(DeviceBlocks.MAC_MAX_X.get(), new Item.Properties(), ModDeviceTypes.COMPUTER) { + public static final RegistrySupplier MAC_MAX_X = REGISTER.register(UltreonDevicesMod.id("mac_max_x"), () -> new DeviceItem(DeviceBlocks.MAC_MAX_X.get(), new Item.Properties(), ModDeviceTypes.COMPUTER) { @NotNull @Override public Component getDescription() { @@ -60,7 +60,7 @@ public Component getName(@NotNull ItemStack stack) { public static final DyeableRegistration PRINTERS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_printer"), () -> new ColoredDeviceItem(DeviceBlocks.PRINTERS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.PRINTER)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_printer"), () -> new ColoredDeviceItem(DeviceBlocks.PRINTERS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.PRINTER)); } @Override @@ -73,7 +73,7 @@ protected Registrar autoInit() { public static final DyeableRegistration ROUTERS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_router"), () -> new ColoredDeviceItem(DeviceBlocks.ROUTERS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.ROUTER)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_router"), () -> new ColoredDeviceItem(DeviceBlocks.ROUTERS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.ROUTER)); } @Override @@ -86,7 +86,7 @@ protected Registrar autoInit() { public static final DyeableRegistration OFFICE_CHAIRS = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_office_chair"), () -> new ColoredDeviceItem(DeviceBlocks.OFFICE_CHAIRS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.SEAT)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_office_chair"), () -> new ColoredDeviceItem(DeviceBlocks.OFFICE_CHAIRS.of(color).get(), new Item.Properties(), color, ModDeviceTypes.SEAT)); } @Override @@ -99,7 +99,7 @@ protected Registrar autoInit() { public static final DyeableRegistration FLASH_DRIVE = new DyeableRegistration<>() { @Override public RegistrySupplier register(Registrar registrar, DyeColor color) { - return registrar.register(Devices.id(color.getName() + "_flash_drive"), () -> new FlashDriveItem(color)); + return registrar.register(UltreonDevicesMod.id(color.getName() + "_flash_drive"), () -> new FlashDriveItem(color)); } @Override @@ -108,31 +108,31 @@ protected Registrar autoInit() { } }; - public static final RegistrySupplier PAPER = REGISTER.register(Devices.id("paper"), () -> new BlockItem(DeviceBlocks.PAPER.get(), new Item.Properties())); - - public static final RegistrySupplier PLASTIC_UNREFINED = REGISTER.register(Devices.id("plastic_unrefined"), () -> new BasicItem(new Item.Properties())); - public static final RegistrySupplier PLASTIC = REGISTER.register(Devices.id("plastic"), () -> new BasicItem(new Item.Properties())); - public static final RegistrySupplier PLASTIC_FRAME = REGISTER.register(Devices.id("plastic_frame"), () -> new BasicItem(new Item.Properties())); - public static final RegistrySupplier WHEEL = REGISTER.register(Devices.id("wheel"), () -> new BasicItem(new Item.Properties())); - public static final RegistrySupplier GLASS_DUST = REGISTER.register(Devices.id("glass_dust"), () -> new Item(new Item.Properties())); - - public static final RegistrySupplier COMPONENT_CIRCUIT_BOARD = REGISTER.register(Devices.id("circuit_board"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_MOTHERBOARD = REGISTER.register(Devices.id("motherboard"), () -> new MotherboardItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_MOTHERBOARD_FULL = REGISTER.register(Devices.id("motherboard_full"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_CPU = REGISTER.register(Devices.id("cpu"), () -> new MotherboardItem.Component(new Item.Properties())); - public static final RegistrySupplier COMPONENT_RAM = REGISTER.register(Devices.id("ram"), () -> new MotherboardItem.Component(new Item.Properties())); - public static final RegistrySupplier COMPONENT_GPU = REGISTER.register(Devices.id("gpu"), () -> new MotherboardItem.Component(new Item.Properties())); - public static final RegistrySupplier COMPONENT_WIFI = REGISTER.register(Devices.id("wifi"), () -> new MotherboardItem.Component(new Item.Properties())); - public static final RegistrySupplier COMPONENT_HARD_DRIVE = REGISTER.register(Devices.id("hard_drive"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_FLASH_CHIP = REGISTER.register(Devices.id("flash_chip"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_SOLID_STATE_DRIVE = REGISTER.register(Devices.id("solid_state_drive"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_BATTERY = REGISTER.register(Devices.id("battery"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_SCREEN = REGISTER.register(Devices.id("screen"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_CONTROLLER_UNIT = REGISTER.register(Devices.id("controller_unit"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_SMALL_ELECTRIC_MOTOR = REGISTER.register(Devices.id("small_electric_motor"), () -> new ComponentItem(new Item.Properties())); - public static final RegistrySupplier COMPONENT_CARRIAGE = REGISTER.register(Devices.id("carriage"), () -> new ComponentItem(new Item.Properties())); - - public static final RegistrySupplier ETHERNET_CABLE = REGISTER.register(Devices.id("ethernet_cable"), EthernetCableItem::new); + public static final RegistrySupplier PAPER = REGISTER.register(UltreonDevicesMod.id("paper"), () -> new BlockItem(DeviceBlocks.PAPER.get(), new Item.Properties())); + + public static final RegistrySupplier PLASTIC_UNREFINED = REGISTER.register(UltreonDevicesMod.id("plastic_unrefined"), () -> new BasicItem(new Item.Properties())); + public static final RegistrySupplier PLASTIC = REGISTER.register(UltreonDevicesMod.id("plastic"), () -> new BasicItem(new Item.Properties())); + public static final RegistrySupplier PLASTIC_FRAME = REGISTER.register(UltreonDevicesMod.id("plastic_frame"), () -> new BasicItem(new Item.Properties())); + public static final RegistrySupplier WHEEL = REGISTER.register(UltreonDevicesMod.id("wheel"), () -> new BasicItem(new Item.Properties())); + public static final RegistrySupplier GLASS_DUST = REGISTER.register(UltreonDevicesMod.id("glass_dust"), () -> new Item(new Item.Properties())); + + public static final RegistrySupplier COMPONENT_CIRCUIT_BOARD = REGISTER.register(UltreonDevicesMod.id("circuit_board"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_MOTHERBOARD = REGISTER.register(UltreonDevicesMod.id("motherboard"), () -> new MotherboardItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_MOTHERBOARD_FULL = REGISTER.register(UltreonDevicesMod.id("motherboard_full"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_CPU = REGISTER.register(UltreonDevicesMod.id("cpu"), () -> new MotherboardItem.Component(new Item.Properties())); + public static final RegistrySupplier COMPONENT_RAM = REGISTER.register(UltreonDevicesMod.id("ram"), () -> new MotherboardItem.Component(new Item.Properties())); + public static final RegistrySupplier COMPONENT_GPU = REGISTER.register(UltreonDevicesMod.id("gpu"), () -> new MotherboardItem.Component(new Item.Properties())); + public static final RegistrySupplier COMPONENT_WIFI = REGISTER.register(UltreonDevicesMod.id("wifi"), () -> new MotherboardItem.Component(new Item.Properties())); + public static final RegistrySupplier COMPONENT_HARD_DRIVE = REGISTER.register(UltreonDevicesMod.id("hard_drive"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_FLASH_CHIP = REGISTER.register(UltreonDevicesMod.id("flash_chip"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_SOLID_STATE_DRIVE = REGISTER.register(UltreonDevicesMod.id("solid_state_drive"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_BATTERY = REGISTER.register(UltreonDevicesMod.id("battery"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_SCREEN = REGISTER.register(UltreonDevicesMod.id("screen"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_CONTROLLER_UNIT = REGISTER.register(UltreonDevicesMod.id("controller_unit"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_SMALL_ELECTRIC_MOTOR = REGISTER.register(UltreonDevicesMod.id("small_electric_motor"), () -> new ComponentItem(new Item.Properties())); + public static final RegistrySupplier COMPONENT_CARRIAGE = REGISTER.register(UltreonDevicesMod.id("carriage"), () -> new ComponentItem(new Item.Properties())); + + public static final RegistrySupplier ETHERNET_CABLE = REGISTER.register(UltreonDevicesMod.id("ethernet_cable"), EthernetCableItem::new); public static Stream getAllItems() { diff --git a/common/src/main/java/dev/ultreon/devices/init/DeviceSounds.java b/common/src/main/java/dev/ultreon/devices/init/DeviceSounds.java new file mode 100644 index 000000000..20dbcc74c --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceSounds.java @@ -0,0 +1,21 @@ +package dev.ultreon.devices.init; + +import dev.architectury.registry.registries.Registrar; +import dev.architectury.registry.registries.RegistrySupplier; +import dev.ultreon.devices.UltreonDevicesMod; +import net.minecraft.core.registries.Registries; +import net.minecraft.sounds.SoundEvent; + +/** + * @author MrCrayfish + */ +public class DeviceSounds { + private static final Registrar REGISTER = UltreonDevicesMod.REGISTRIES.get().get(Registries.SOUND_EVENT); + + public static final RegistrySupplier PRINTER_PRINTING = REGISTER.register(UltreonDevicesMod.id("printer_printing"), () -> SoundEvent.createVariableRangeEvent(UltreonDevicesMod.id("printer_printing"))); + public static final RegistrySupplier PRINTER_LOADING_PAPER = REGISTER.register(UltreonDevicesMod.id("printer_loading_paper"), () -> SoundEvent.createVariableRangeEvent(UltreonDevicesMod.id("printer_loading_paper"))); + + public static void register() { + + } +} diff --git a/common/src/main/java/com/ultreon/devices/init/DeviceTags.java b/common/src/main/java/dev/ultreon/devices/init/DeviceTags.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/init/DeviceTags.java rename to common/src/main/java/dev/ultreon/devices/init/DeviceTags.java index c711e123a..d6db59415 100644 --- a/common/src/main/java/com/ultreon/devices/init/DeviceTags.java +++ b/common/src/main/java/dev/ultreon/devices/init/DeviceTags.java @@ -1,10 +1,9 @@ -package com.ultreon.devices.init; +package dev.ultreon.devices.init; -import com.ultreon.devices.Devices; +import dev.ultreon.devices.UltreonDevicesMod; import net.minecraft.core.registries.Registries; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.Block; public class DeviceTags { public static void register() { @@ -16,7 +15,7 @@ public static class Items { public static final TagKey LAPTOPS = create("laptops"); private static TagKey create(String path) { - return TagKey.create(Registries.ITEM, Devices.res(path)); + return TagKey.create(Registries.ITEM, UltreonDevicesMod.res(path)); } public static void register() { diff --git a/common/src/main/java/com/ultreon/devices/init/ModTags.java b/common/src/main/java/dev/ultreon/devices/init/ModTags.java similarity index 71% rename from common/src/main/java/com/ultreon/devices/init/ModTags.java rename to common/src/main/java/dev/ultreon/devices/init/ModTags.java index 29e1c752f..bf6606e88 100644 --- a/common/src/main/java/com/ultreon/devices/init/ModTags.java +++ b/common/src/main/java/dev/ultreon/devices/init/ModTags.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.init; +package dev.ultreon.devices.init; -import com.ultreon.devices.Devices; +import dev.ultreon.devices.UltreonDevicesMod; import net.minecraft.core.registries.Registries; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -18,7 +18,7 @@ public static final class Items { public static final TagKey ROUTERS = createTag("routers"); private static TagKey createTag(String name) { - return TagKey.create(Registries.ITEM, Devices.id(name)); + return TagKey.create(Registries.ITEM, UltreonDevicesMod.id(name)); } } @@ -28,15 +28,17 @@ public static final class Blocks { public static final TagKey ROUTERS = createTag("routers"); private static TagKey createTag(String name) { - return TagKey.create(Registries.BLOCK, Devices.id(name)); + return TagKey.create(Registries.BLOCK, UltreonDevicesMod.id(name)); } } public static final class BlockEntityTypes { public static final TagKey> NETWORK_DEVICES = createTag("network_devices"); + public static final TagKey> COMPUTERS = createTag("computers"); + public static final TagKey> PRINTERS = createTag("printers"); private static TagKey> createTag(String name) { - return TagKey.create(Registries.BLOCK_ENTITY_TYPE, Devices.id(name)); + return TagKey.create(Registries.BLOCK_ENTITY_TYPE, UltreonDevicesMod.id(name)); } } } diff --git a/common/src/main/java/com/ultreon/devices/init/RegistrationHandler.java b/common/src/main/java/dev/ultreon/devices/init/RegistrationHandler.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/init/RegistrationHandler.java rename to common/src/main/java/dev/ultreon/devices/init/RegistrationHandler.java index 3d350d1aa..7040b3d41 100644 --- a/common/src/main/java/com/ultreon/devices/init/RegistrationHandler.java +++ b/common/src/main/java/dev/ultreon/devices/init/RegistrationHandler.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.init; +package dev.ultreon.devices.init; import dev.architectury.utils.EnvExecutor; import net.fabricmc.api.EnvType; diff --git a/common/src/main/java/com/ultreon/devices/item/BasicItem.java b/common/src/main/java/dev/ultreon/devices/item/BasicItem.java similarity index 57% rename from common/src/main/java/com/ultreon/devices/item/BasicItem.java rename to common/src/main/java/dev/ultreon/devices/item/BasicItem.java index b5888a2e3..b03d380a4 100644 --- a/common/src/main/java/com/ultreon/devices/item/BasicItem.java +++ b/common/src/main/java/dev/ultreon/devices/item/BasicItem.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.item; +package dev.ultreon.devices.item; -import com.ultreon.devices.Devices; +import dev.ultreon.devices.UltreonDevicesMod; import net.minecraft.world.item.Item; /** @@ -9,6 +9,6 @@ @SuppressWarnings("UnstableApiUsage") public class BasicItem extends Item { public BasicItem(Properties properties) { - super(properties.arch$tab(Devices.TAB_DEVICE)); + super(properties.arch$tab(UltreonDevicesMod.TAB_DEVICE)); } } diff --git a/common/src/main/java/com/ultreon/devices/item/ColoredDeviceItem.java b/common/src/main/java/dev/ultreon/devices/item/ColoredDeviceItem.java similarity index 78% rename from common/src/main/java/com/ultreon/devices/item/ColoredDeviceItem.java rename to common/src/main/java/dev/ultreon/devices/item/ColoredDeviceItem.java index 700c05f56..06e474a3b 100644 --- a/common/src/main/java/com/ultreon/devices/item/ColoredDeviceItem.java +++ b/common/src/main/java/dev/ultreon/devices/item/ColoredDeviceItem.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.item; +package dev.ultreon.devices.item; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.util.Colored; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.util.Colored; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.NotNull; @@ -14,6 +14,7 @@ public ColoredDeviceItem(@NotNull Block block, Properties tab, DyeColor color, M this.color = color; } + @Override public DyeColor getColor() { return color; } diff --git a/common/src/main/java/dev/ultreon/devices/item/ComponentItem.java b/common/src/main/java/dev/ultreon/devices/item/ComponentItem.java new file mode 100644 index 000000000..3fc010f3e --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/item/ComponentItem.java @@ -0,0 +1,10 @@ +package dev.ultreon.devices.item; + +import dev.ultreon.devices.UltreonDevicesMod; +import net.minecraft.world.item.Item; + +public class ComponentItem extends Item { + public ComponentItem(Properties pProperties) { + super(pProperties.arch$tab(UltreonDevicesMod.TAB_DEVICE)); + } +} diff --git a/common/src/main/java/com/ultreon/devices/item/DeviceItem.java b/common/src/main/java/dev/ultreon/devices/item/DeviceItem.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/item/DeviceItem.java rename to common/src/main/java/dev/ultreon/devices/item/DeviceItem.java index 2ef8a89a0..8db20f78e 100644 --- a/common/src/main/java/com/ultreon/devices/item/DeviceItem.java +++ b/common/src/main/java/dev/ultreon/devices/item/DeviceItem.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.item; +package dev.ultreon.devices.item; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.IDeviceType; import dev.architectury.injectables.annotations.PlatformOnly; +import dev.ultreon.devices.IDeviceType; +import dev.ultreon.devices.ModDeviceTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.item.BlockItem; @@ -32,6 +32,7 @@ public CompoundTag getShareTag(ItemStack stack) { return tag; } + @Override public ModDeviceTypes getDeviceType() { return deviceType; } diff --git a/common/src/main/java/dev/ultreon/devices/item/EthernetCableItem.java b/common/src/main/java/dev/ultreon/devices/item/EthernetCableItem.java new file mode 100644 index 000000000..becd214fe --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/item/EthernetCableItem.java @@ -0,0 +1,210 @@ +package dev.ultreon.devices.item; + +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.block.entity.NetworkDeviceBlockEntity; +import dev.ultreon.devices.block.entity.RouterBlockEntity; +import dev.ultreon.devices.core.network.Router; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.util.KeyboardHelper; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +/** + * @author MrCrayfish + */ +public class EthernetCableItem extends Item { + @SuppressWarnings("UnstableApiUsage") + public EthernetCableItem() { + super(new Properties().arch$tab(UltreonDevicesMod.TAB_DEVICE).stacksTo(1)); + } + + private static double getDistance(BlockPos source, BlockPos target) { + return Math.sqrt(source.distToCenterSqr(target.getX() + 0.5, target.getY() + 0.5, target.getZ() + 0.5)); + } + + @Override + public @NotNull InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + Player player = context.getPlayer(); + BlockPos pos = context.getClickedPos(); + InteractionHand hand = context.getHand(); + + if (level.isClientSide || player == null) + return InteractionResult.SUCCESS; + + ItemStack heldItem = player.getItemInHand(hand); + BlockEntity blockEntity = level.getBlockEntity(pos); + + if (!(blockEntity instanceof RouterBlockEntity routerBlockEntity)) { + return selectDevice(blockEntity, heldItem, player); + } + if (!heldItem.hasTag()) { + sendGameInfoMessage(player, "message.devices.invalid_cable"); + return InteractionResult.FAIL; + } + + Router router = routerBlockEntity.getRouter(); + + CompoundTag tag = heldItem.getTag(); + assert tag != null; + + BlockPos receiverPos = BlockPos.of(tag.getLong("pos")); + BlockEntity receiverBlockEntity = level.getBlockEntity(receiverPos); + + if (!(receiverBlockEntity instanceof NetworkDeviceBlockEntity networkDevice)) { + return registerUnknown(router, tag, heldItem, player); + } + + DebugLog.log("Connecting network device."); + if (router.isDeviceRegistered(networkDevice)) { + DebugLog.log("Already connected"); + sendGameInfoMessage(player, "message.devices.device_already_connected"); + return InteractionResult.FAIL; + } + + return tryConnect(routerBlockEntity, networkDevice, router, heldItem, receiverBlockEntity, player); + } + + @NotNull + private InteractionResult selectDevice(BlockEntity blockEntity, ItemStack heldItem, Player player) { + if (!(blockEntity instanceof NetworkDeviceBlockEntity networkDevice)) + return InteractionResult.SUCCESS; + + heldItem.setTag(new CompoundTag()); + CompoundTag tag = heldItem.getTag(); + assert tag != null; + tag.putUUID("id", networkDevice.getId()); + tag.putString("name", networkDevice.getCustomName()); + tag.putLong("pos", networkDevice.getBlockPos().asLong()); + + sendGameInfoMessage(player, "message.devices.select_router"); + return InteractionResult.FAIL; + } + + @NotNull + private InteractionResult registerUnknown(Router router, CompoundTag tag, ItemStack heldItem, Player player) { + DebugLog.log("Not a network device!"); + if (router.addDevice(tag.getUUID("id"), tag.getString("name"))) { + DebugLog.log("Registered, but it's not a network device!"); + heldItem.shrink(1); + sendGameInfoMessage(player, "message.devices.successful_registered"); + return InteractionResult.SUCCESS; + } + + DebugLog.log("Max device limit reached!"); + sendGameInfoMessage(player, "message.devices.router_max_devices"); + return InteractionResult.FAIL; + } + + @NotNull + private InteractionResult tryConnect(RouterBlockEntity routerBlockEntity, NetworkDeviceBlockEntity toConnect, + Router router, ItemStack heldItem, BlockEntity receiverBlockEntity, Player player) { + DebugLog.log("Unregistered device " + toConnect); + if (!router.addDevice(toConnect)) { + DebugLog.log("Max device limit reached!"); + sendGameInfoMessage(player, "message.devices.router_max_devices"); + return InteractionResult.SUCCESS; + } + + DebugLog.log("Adding device"); + toConnect.connect(router); + if (!player.isCreative()) heldItem.shrink(1); + + if (getDistance(receiverBlockEntity.getBlockPos(), routerBlockEntity.getBlockPos()) > DeviceConfig.SIGNAL_RANGE.get()) { + DebugLog.log("Registered, but too low signal!"); + sendGameInfoMessage(player, "message.devices.successful_registered"); + return InteractionResult.CONSUME_PARTIAL; + } + + DebugLog.log("Connected!"); + sendGameInfoMessage(player, "message.devices.successful_connection"); + return InteractionResult.CONSUME_PARTIAL; + } + + private void sendGameInfoMessage(Player player, String message) { + if (player instanceof ServerPlayer serverPlayer) { + serverPlayer.sendSystemMessage(Component.translatable(message)); + } + } + + @NotNull + @Override + public InteractionResultHolder use(Level level, @NotNull Player player, @NotNull InteractionHand usedHand) { + if (level.isClientSide) + return super.use(level, player, usedHand); + + ItemStack heldItem = player.getItemInHand(usedHand); + if (player.isCrouching()) { + heldItem.resetHoverName(); + heldItem.setTag(null); + return new InteractionResultHolder<>(InteractionResult.SUCCESS, heldItem); + } + + return super.use(level, player, usedHand); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, @NotNull List tooltip, @NotNull TooltipFlag isAdvanced) { + if (!stack.hasTag()) { + if (!KeyboardHelper.isShiftDown()) { + tooltip.add(Component.literal(ChatFormatting.GRAY + "Use this cable to connect")); + tooltip.add(Component.literal(ChatFormatting.GRAY + "a device to a router.")); + tooltip.add(Component.literal(ChatFormatting.YELLOW + "Hold SHIFT for How-To")); + return; + } + + tooltip.add(Component.literal(ChatFormatting.GRAY + "Start by right clicking a")); + tooltip.add(Component.literal(ChatFormatting.GRAY + "device with this cable")); + tooltip.add(Component.literal(ChatFormatting.GRAY + "then right click the ")); + tooltip.add(Component.literal(ChatFormatting.GRAY + "router you want to")); + tooltip.add(Component.literal(ChatFormatting.GRAY + "connect this device to.")); + } else { + CompoundTag tag = stack.getTag(); + if (tag != null) { + tooltip.add(Component.literal(ChatFormatting.RED.toString() + ChatFormatting.BOLD + "ID: " + ChatFormatting.RESET + tag.getUUID("id"))); + tooltip.add(Component.literal(ChatFormatting.RED.toString() + ChatFormatting.BOLD + "Device: " + ChatFormatting.RESET + tag.getString("name"))); + + BlockPos devicePos = BlockPos.of(tag.getLong("pos")); + String text = ChatFormatting.RED.toString() + ChatFormatting.BOLD + "X: " + ChatFormatting.RESET + devicePos.getX() + " " + + ChatFormatting.RED + ChatFormatting.BOLD + "Y: " + ChatFormatting.RESET + devicePos.getY() + " " + + ChatFormatting.RED + ChatFormatting.BOLD + "Z: " + ChatFormatting.RESET + devicePos.getZ(); + tooltip.add(Component.literal(text)); + } + } + super.appendHoverText(stack, level, tooltip, isAdvanced); + } + + @Environment(EnvType.CLIENT) + public boolean hasEffect(ItemStack stack) { + return stack.hasTag(); + } + + @NotNull + @Override + public Component getName(ItemStack stack) { + if (stack.hasTag()) + return super.getDescription().copy().withStyle(ChatFormatting.GRAY, ChatFormatting.BOLD); + + return super.getName(stack); + } +} diff --git a/common/src/main/java/com/ultreon/devices/item/FlashDriveItem.java b/common/src/main/java/dev/ultreon/devices/item/FlashDriveItem.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/item/FlashDriveItem.java rename to common/src/main/java/dev/ultreon/devices/item/FlashDriveItem.java index 3a4f4eb3a..d30381c8e 100644 --- a/common/src/main/java/com/ultreon/devices/item/FlashDriveItem.java +++ b/common/src/main/java/dev/ultreon/devices/item/FlashDriveItem.java @@ -1,11 +1,11 @@ -package com.ultreon.devices.item; +package dev.ultreon.devices.item; -import com.ultreon.devices.Devices; -import com.ultreon.devices.IDeviceType; -import com.ultreon.devices.ModDeviceTypes; -import com.ultreon.devices.Reference; -import com.ultreon.devices.util.Colored; import dev.architectury.registry.registries.RegistrarManager; +import dev.ultreon.devices.IDeviceType; +import dev.ultreon.devices.ModDeviceTypes; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.util.Colored; import net.minecraft.ChatFormatting; import net.minecraft.core.NonNullList; import net.minecraft.core.registries.Registries; @@ -27,7 +27,7 @@ public class FlashDriveItem extends Item implements Colored, SubItems, IDeviceTy private final DyeColor color; public FlashDriveItem(DyeColor color) { - super(new Properties().arch$tab(Devices.TAB_DEVICE).rarity(Rarity.UNCOMMON).stacksTo(1)); + super(new Properties().arch$tab(UltreonDevicesMod.TAB_DEVICE).rarity(Rarity.UNCOMMON).stacksTo(1)); this.color = color; } diff --git a/common/src/main/java/com/ultreon/devices/item/MotherboardItem.java b/common/src/main/java/dev/ultreon/devices/item/MotherboardItem.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/item/MotherboardItem.java rename to common/src/main/java/dev/ultreon/devices/item/MotherboardItem.java index 5b3ecd575..ae212f687 100644 --- a/common/src/main/java/com/ultreon/devices/item/MotherboardItem.java +++ b/common/src/main/java/dev/ultreon/devices/item/MotherboardItem.java @@ -1,10 +1,9 @@ -package com.ultreon.devices.item; +package dev.ultreon.devices.item; -import com.ultreon.devices.util.KeyboardHelper; +import dev.ultreon.devices.util.KeyboardHelper; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; -import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/item/SubItems.java b/common/src/main/java/dev/ultreon/devices/item/SubItems.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/item/SubItems.java rename to common/src/main/java/dev/ultreon/devices/item/SubItems.java index 35590a543..725485d55 100644 --- a/common/src/main/java/com/ultreon/devices/item/SubItems.java +++ b/common/src/main/java/dev/ultreon/devices/item/SubItems.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.item; +package dev.ultreon.devices.item; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/dev/ultreon/devices/mineos/DestFactor.java b/common/src/main/java/dev/ultreon/devices/mineos/DestFactor.java new file mode 100644 index 000000000..b8b730400 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/mineos/DestFactor.java @@ -0,0 +1,10 @@ +package dev.ultreon.devices.mineos; + +public enum DestFactor { + ZERO, + ONE, + SRC_ALPHA, + SRC_COLOR, + ONE_MINUS_SRC_ALPHA, + ONE_MINUS_SRC_COLOR, +} diff --git a/common/src/main/java/dev/ultreon/devices/mineos/DriverManager.java b/common/src/main/java/dev/ultreon/devices/mineos/DriverManager.java new file mode 100644 index 000000000..9b3a34859 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/mineos/DriverManager.java @@ -0,0 +1,7 @@ +package dev.ultreon.devices.mineos; + +public class DriverManager { + public void loadDrivers() { + + } +} diff --git a/common/src/main/java/dev/ultreon/devices/mineos/MineOSSystem.java b/common/src/main/java/dev/ultreon/devices/mineos/MineOSSystem.java new file mode 100644 index 000000000..8a637b628 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/mineos/MineOSSystem.java @@ -0,0 +1,13 @@ +package dev.ultreon.devices.mineos; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.mineos.client.Settings; +import dev.ultreon.devices.object.AppInfo; + +public interface MineOSSystem { + Settings getSettings(); + + Iterable getInstalledApplications(); + + Application openApplication(AppInfo application); +} diff --git a/common/src/main/java/dev/ultreon/devices/mineos/SourceFactor.java b/common/src/main/java/dev/ultreon/devices/mineos/SourceFactor.java new file mode 100644 index 000000000..1ec3fe7e2 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/mineos/SourceFactor.java @@ -0,0 +1,10 @@ +package dev.ultreon.devices.mineos; + +public enum SourceFactor { + ZERO, + ONE, + SRC_ALPHA, + SRC_COLOR, + ONE_MINUS_SRC_ALPHA, + ONE_MINUS_SRC_COLOR, +} diff --git a/common/src/main/java/com/ultreon/devices/programs/BoatRacersApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/BoatRacersApp.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/programs/BoatRacersApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/BoatRacersApp.java index aa6dbc577..8dddc32b4 100644 --- a/common/src/main/java/com/ultreon/devices/programs/BoatRacersApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/BoatRacersApp.java @@ -1,18 +1,18 @@ -package com.ultreon.devices.programs; - - -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.CheckBox; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.exception.WorldLessException; -import com.ultreon.devices.object.Game; -import com.ultreon.devices.object.TileGrid; -import com.ultreon.devices.object.tiles.Tile; +package dev.ultreon.devices.mineos.apps; + + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.CheckBox; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.exception.WorldLessException; +import dev.ultreon.devices.object.Game; +import dev.ultreon.devices.object.TileGrid; +import dev.ultreon.devices.object.tiles.Tile; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; @@ -101,7 +101,7 @@ public void onClose() { @Override public void onTick() { - if (Laptop.isWorldLess()) { + if (MineOS.getOpened().isWorldLess()) { return; } super.onTick(); diff --git a/common/src/main/java/com/ultreon/devices/programs/IconsApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/IconsApp.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/programs/IconsApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/IconsApp.java index 9de1c46ae..6eba53434 100644 --- a/common/src/main/java/com/ultreon/devices/programs/IconsApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/IconsApp.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.programs; +package dev.ultreon.devices.mineos.apps; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.ComboBox; -import com.ultreon.devices.programs.system.layout.StandardLayout; +import dev.ultreon.devices.api.app.*; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.ComboBox; +import dev.ultreon.devices.mineos.apps.system.layout.StandardLayout; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; @@ -59,7 +59,7 @@ public void init(@Nullable CompoundTag intent) { btnNextPage.setClickListener((mouseX, mouseY, mouseButton) -> { if (mouseButton == 0) { - if (offset < (iconSetComboBox.getSelectedItem().getIcons().length / 126)) offset++; + if (offset < (iconSetComboBox.getSelectedItem().icons().length / 126)) offset++; updateIcons(); } }); @@ -72,8 +72,8 @@ public void init(@Nullable CompoundTag intent) { private void updateIcons() { layoutContainer.clear(); IconSet set = iconSetComboBox.getSelectedItem(); - for (int i = 0; i < 126 && i < set.getIcons().length - (offset * 126); i++) { - Enum anEnum = set.getIcons()[i + (offset * 126)]; + for (int i = 0; i < 126 && i < set.icons().length - (offset * 126); i++) { + Enum anEnum = set.icons()[i + (offset * 126)]; IIcon icon = (IIcon) anEnum; int posX = (i % 18) * 18 - 1; int posY = (i / 18) * 18 + 20; @@ -103,26 +103,11 @@ public void save(CompoundTag tag) { } - public static class IconSet { - private final String name; - private final Enum[] icons; - - public IconSet(String name, Enum[] icons) { - this.name = name; - this.icons = icons; - } - - public String getName() { - return name; - } - - public Enum[] getIcons() { - return icons; - } + public record IconSet(String name, Enum[] icons) { @Override - public String toString() { - return name; + public String toString() { + return name; + } } - } } diff --git a/common/src/main/java/com/ultreon/devices/programs/NoteStashApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/NoteStashApp.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/programs/NoteStashApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/NoteStashApp.java index 9b20a78e0..30ad5a443 100644 --- a/common/src/main/java/com/ultreon/devices/programs/NoteStashApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/NoteStashApp.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.programs; - -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.*; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.core.io.FileSystem; +package dev.ultreon.devices.mineos.apps; + +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.core.io.FileSystem; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import org.slf4j.Marker; @@ -55,13 +55,13 @@ public void init(@Nullable CompoundTag intent) { layoutMain = new Layout(180, 80); layoutMain.setInitListener(() -> { notes.getItems().clear(); - Devices.LOGGER.debug(MARKER, "Loading notes..."); + UltreonDevicesMod.LOGGER.debug(MARKER, "Loading notes..."); FileSystem.getApplicationFolder(this, (folder, success) -> { if (success) { assert folder != null; folder.search(file -> file.isForApplication(this)).forEach(file -> notes.addItem(Note.fromFile(file))); } else { - Devices.LOGGER.error(MARKER, "Failed to get application folder"); + UltreonDevicesMod.LOGGER.error(MARKER, "Failed to get application folder"); //TODO error dialog } }); @@ -145,7 +145,7 @@ public void init(@Nullable CompoundTag intent) { assert folder != null; folder.search(file -> file.isForApplication(this)).forEach(file -> notes.addItem(Note.fromFile(file))); } else { - Devices.LOGGER.error(MARKER, "Failed to get application folder"); + UltreonDevicesMod.LOGGER.error(MARKER, "Failed to get application folder"); //TODO error dialog } }); diff --git a/common/src/main/java/com/ultreon/devices/programs/PixelPainterApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/PixelPainterApp.java similarity index 86% rename from common/src/main/java/com/ultreon/devices/programs/PixelPainterApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/PixelPainterApp.java index 502268c39..ca3dc2a52 100644 --- a/common/src/main/java/com/ultreon/devices/programs/PixelPainterApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/PixelPainterApp.java @@ -1,39 +1,42 @@ -package com.ultreon.devices.programs; +package dev.ultreon.devices.mineos.apps; +import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.TextureUtil; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Reference; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.TextField; -import com.ultreon.devices.api.app.component.*; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.object.Canvas; -import com.ultreon.devices.object.ColorGrid; -import com.ultreon.devices.object.Picture; -import com.ultreon.devices.programs.system.layout.StandardLayout; +import com.mojang.blaze3d.vertex.VertexConsumer; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.*; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.TextField; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.system.layout.StandardLayout; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.object.Canvas; +import dev.ultreon.devices.object.ColorGrid; +import dev.ultreon.devices.object.Picture; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import org.joml.Matrix3f; import org.joml.Quaternionf; +import org.joml.Vector3f; -import org.jetbrains.annotations.Nullable; import java.awt.*; -import java.lang.System; import java.util.Objects; @SuppressWarnings({"unused", "FieldCanBeLocal"}) @@ -71,7 +74,7 @@ public class PixelPainterApp extends Application { /* Drawing */ private Layout layoutDraw; - private com.ultreon.devices.object.Canvas canvas; + private dev.ultreon.devices.object.Canvas canvas; private ButtonToggle btnPencil; private ButtonToggle btnBucket; private ButtonToggle btnEraser; @@ -274,7 +277,7 @@ public void render(GuiGraphics graphics, Picture picture, Minecraft mc, int x, i layoutDraw = new Layout(213, 140); - canvas = new com.ultreon.devices.object.Canvas(5, 5); + canvas = new dev.ultreon.devices.object.Canvas(5, 5); layoutDraw.addComponent(canvas); RadioGroup toolGroup = new RadioGroup(); @@ -383,7 +386,7 @@ public void render(GuiGraphics graphics, Picture picture, Minecraft mc, int x, i colorDisplay = new Component(158, 5) { @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { graphics.fill(xPosition, yPosition, xPosition + 50, yPosition + 20, Color.DARK_GRAY.getRGB()); graphics.fill(xPosition + 1, yPosition + 1, xPosition + 49, yPosition + 19, canvas.getCurrentColor()); } @@ -488,10 +491,11 @@ public Class getRenderer() { public static class PictureRenderer implements IPrint.Renderer { public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.MOD_ID, "textures/model/paper.png"); + public static final int MAX_COLOR = 0xFFFFFF; @SuppressWarnings("resource") @Override - public boolean render(PoseStack pose, CompoundTag data) { + public boolean render(PoseStack pose, VertexConsumer buffer, CompoundTag data, int packedLight, int packedOverlay, Direction direction) { if (data.contains("pixels", Tag.TAG_INT_ARRAY) && data.contains("resolution", Tag.TAG_INT)) { int[] pixels = data.getIntArray("pixels"); int resolution = data.getInt("resolution"); @@ -501,38 +505,56 @@ public boolean render(PoseStack pose, CompoundTag data) { return false; RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(770, 771, 1, 0); -// GlStateManager.disableLighting(); - pose.mulPose(new Quaternionf(0, 1, 0, 180)); + RenderSystem.enableDepthTest(); + pose.mulPose(new Quaternionf(0, 0, 0, 180)); // This is for the paper background if (!cut) { RenderSystem.setShaderTexture(0, TEXTURE); - RenderUtil.drawRectWithTexture(TEXTURE, pose, -1, 0, 0, 0, 1, 1, resolution, resolution, resolution, resolution); + RenderUtil.drawRectWithTexture2(TEXTURE, pose, 0, 0, 0, 0, 1, 1, resolution, resolution, resolution, resolution); } // This creates a flipped copy of the pixel array // as it otherwise would be mirrored + // TODO This is not the best way to do it, causes performance issues. Consider caching native images. NativeImage image = new NativeImage(resolution, resolution, false); for (int i = 0; i < resolution; i++) { for (int j = 0; j < resolution; j++) { - image.setPixelRGBA(resolution - i - 1, resolution - j - 1, pixels[i + j * resolution]); + image.setPixelRGBA(resolution - i - 1, resolution - j - 1, getPx(pixels, i, j, resolution)); } } int textureId = TextureUtil.generateTextureId(); TextureUtil.prepareImage(textureId, resolution, resolution); + if (!RenderSystem.isOnRenderThreadOrInit()) { + RenderSystem.recordRenderCall(() -> GlStateManager._bindTexture(textureId)); + } else { + GlStateManager._bindTexture(textureId); + } + image.upload(0, 0, 0, false); RenderSystem.setShaderTexture(0, textureId); - RenderUtil.drawRectWithTexture(null, pose, -1, 0, 0, 0, 1, 1, resolution, resolution, resolution, resolution); + Matrix3f poseNormal = pose.last().normal(); + Vector3f transformedNor = poseNormal.transform(new Vector3f()); + float norX = transformedNor.x(); + float norY = transformedNor.y(); + float norZ = transformedNor.z(); + pose.translate(0, 0, 0.01); + RenderUtil.drawRectWithTexture2(null, pose, 1, 0, 0, 0, -1, 1, resolution, resolution, resolution, resolution, packedLight, packedOverlay, norX, norY, norZ); RenderSystem.deleteTexture(textureId); -// RenderSystem.disableRescaleNormal(); RenderSystem.disableBlend(); -// RenderSystem.enableLighting(); return true; } return false; } + + private static int getPx(int[] pixels, int i, int j, int resolution) { + int pixel = pixels[i + j * resolution]; + int r = 255 - (pixel & 255); + int g = 255 - (pixel >> 8 & 255); + int b = 255 - (pixel >> 16 & 255); + return MAX_COLOR - (r << 16 | g << 8 | b) & MAX_COLOR | (pixel >> 24 & 0xFF) << 24; + } } } diff --git a/common/src/main/java/com/ultreon/devices/programs/TestApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/TestApp.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/programs/TestApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/TestApp.java index 3cb04ec21..ed8dead6a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/TestApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/TestApp.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.programs; +package dev.ultreon.devices.mineos.apps; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.component.Button; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/com/ultreon/devices/programs/auction/AuctionManager.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/AuctionManager.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/programs/auction/AuctionManager.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/auction/AuctionManager.java index 81007c6a5..43ed121c9 100644 --- a/common/src/main/java/com/ultreon/devices/programs/auction/AuctionManager.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/AuctionManager.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.programs.auction; +package dev.ultreon.devices.mineos.apps.auction; -import com.ultreon.devices.programs.auction.object.AuctionItem; +import dev.ultreon.devices.mineos.apps.auction.object.AuctionItem; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; diff --git a/common/src/main/java/com/ultreon/devices/programs/auction/MineBayApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/MineBayApp.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/programs/auction/MineBayApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/auction/MineBayApp.java index 939cf0fae..df648ab0e 100644 --- a/common/src/main/java/com/ultreon/devices/programs/auction/MineBayApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/MineBayApp.java @@ -1,26 +1,24 @@ -package com.ultreon.devices.programs.auction; +package dev.ultreon.devices.mineos.apps.auction; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.*; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.programs.auction.object.AuctionItem; -import com.ultreon.devices.programs.auction.task.TaskAddAuction; -import com.ultreon.devices.programs.auction.task.TaskBuyItem; -import com.ultreon.devices.programs.auction.task.TaskGetAuctions; -import com.ultreon.devices.programs.system.layout.StandardLayout; -import com.ultreon.devices.util.TimeUtil; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.auction.object.AuctionItem; +import dev.ultreon.devices.mineos.apps.auction.task.TaskAddAuction; +import dev.ultreon.devices.mineos.apps.auction.task.TaskBuyItem; +import dev.ultreon.devices.mineos.apps.auction.task.TaskGetAuctions; +import dev.ultreon.devices.mineos.apps.system.layout.StandardLayout; +import dev.ultreon.devices.util.TimeUtil; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/com/ultreon/devices/programs/auction/object/AuctionItem.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/object/AuctionItem.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/programs/auction/object/AuctionItem.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/auction/object/AuctionItem.java index 6aa86e8df..c708471d8 100644 --- a/common/src/main/java/com/ultreon/devices/programs/auction/object/AuctionItem.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/object/AuctionItem.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.auction.object; +package dev.ultreon.devices.mineos.apps.auction.object; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.ItemStack; diff --git a/common/src/main/java/com/ultreon/devices/programs/auction/task/TaskAddAuction.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskAddAuction.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/programs/auction/task/TaskAddAuction.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskAddAuction.java index 80e6748eb..68d0774ac 100644 --- a/common/src/main/java/com/ultreon/devices/programs/auction/task/TaskAddAuction.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskAddAuction.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.auction.task; +package dev.ultreon.devices.mineos.apps.auction.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.auction.AuctionManager; -import com.ultreon.devices.programs.auction.object.AuctionItem; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.auction.AuctionManager; +import dev.ultreon.devices.mineos.apps.auction.object.AuctionItem; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -62,14 +62,14 @@ public void processRequest(CompoundTag nbt, Level level, Player player) { @Override public void prepareResponse(CompoundTag nbt) { - if (isSucessful()) { + if (isSuccessful()) { item.writeToNBT(nbt); } } @Override public void processResponse(CompoundTag nbt) { - if (isSucessful()) { + if (isSuccessful()) { AuctionManager.INSTANCE.addItem(AuctionItem.readFromNBT(nbt)); } } diff --git a/common/src/main/java/com/ultreon/devices/programs/auction/task/TaskBuyItem.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskBuyItem.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/programs/auction/task/TaskBuyItem.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskBuyItem.java index 97da8bfde..3ebad2b73 100644 --- a/common/src/main/java/com/ultreon/devices/programs/auction/task/TaskBuyItem.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskBuyItem.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.programs.auction.task; +package dev.ultreon.devices.mineos.apps.auction.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.programs.auction.AuctionManager; -import com.ultreon.devices.programs.auction.object.AuctionItem; -import com.ultreon.devices.programs.system.object.Account; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.mineos.apps.auction.AuctionManager; +import dev.ultreon.devices.mineos.apps.auction.object.AuctionItem; +import dev.ultreon.devices.mineos.apps.system.object.Account; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/programs/auction/task/TaskGetAuctions.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskGetAuctions.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/programs/auction/task/TaskGetAuctions.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskGetAuctions.java index 842c43139..73acb7447 100644 --- a/common/src/main/java/com/ultreon/devices/programs/auction/task/TaskGetAuctions.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/auction/task/TaskGetAuctions.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.auction.task; +package dev.ultreon.devices.mineos.apps.auction.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.auction.AuctionManager; -import com.ultreon.devices.programs.auction.object.AuctionItem; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.auction.AuctionManager; +import dev.ultreon.devices.mineos.apps.auction.object.AuctionItem; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/programs/debug/TextAreaApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/debug/TextAreaApp.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/programs/debug/TextAreaApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/debug/TextAreaApp.java index a332d9fdb..9554e2fd5 100644 --- a/common/src/main/java/com/ultreon/devices/programs/debug/TextAreaApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/debug/TextAreaApp.java @@ -1,14 +1,13 @@ -package com.ultreon.devices.programs.debug; - -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.ButtonToggle; -import com.ultreon.devices.api.app.component.TextArea; -import com.ultreon.devices.api.app.interfaces.IHighlight; +package dev.ultreon.devices.mineos.apps.debug; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.ButtonToggle; +import dev.ultreon.devices.api.app.component.TextArea; +import dev.ultreon.devices.api.app.interfaces.IHighlight; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; - import org.jetbrains.annotations.Nullable; /** @@ -57,7 +56,7 @@ public void init(@Nullable CompoundTag intent) { buttonDebug.setToolTip("Debug Mode", "Show invisible characters"); buttonDebug.setClickListener((mouseX, mouseY, mouseButton) -> { // if (mouseButton == 0) { -// Laptop.font.setDebug(!buttonDebug.isSelected()); +// MineOS.font.setDebug(!buttonDebug.isSelected()); // } }); layout.addComponent(buttonDebug); diff --git a/common/src/main/java/com/ultreon/devices/programs/email/EmailApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/EmailApp.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/programs/email/EmailApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/EmailApp.java index df7dd5b07..fcd43b2d7 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/EmailApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/EmailApp.java @@ -1,37 +1,35 @@ -package com.ultreon.devices.programs.email; +package dev.ultreon.devices.mineos.apps.email; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Resources; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Image; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.TextArea; -import com.ultreon.devices.api.app.component.TextField; -import com.ultreon.devices.api.app.component.*; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.email.object.Contact; -import com.ultreon.devices.programs.email.object.Email; -import com.ultreon.devices.programs.email.task.*; +import dev.ultreon.devices.Resources; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.*; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.TextArea; +import dev.ultreon.devices.api.app.component.TextField; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.email.object.Contact; +import dev.ultreon.devices.mineos.apps.email.object.Email; +import dev.ultreon.devices.mineos.apps.email.task.*; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.network.chat.FormattedText; import net.minecraft.resources.ResourceLocation; - import org.jetbrains.annotations.Nullable; + import java.awt.*; import java.util.List; import java.util.Objects; @@ -144,7 +142,7 @@ public void init(@Nullable CompoundTag intent) { layoutMainMenu.addComponent(image); logo = new Image.AppImage(86, 20, 28, 28, info); - //logo = new Image(86, 20, 28, 28, info.getIconU(), info.getIconV(), 14, 14, 224, 224, Laptop.ICON_TEXTURES); + //logo = new Image(86, 20, 28, 28, info.getIconU(), info.getIconV(), 14, 14, 224, 224, MineOS.ICON_TEXTURES); layoutMainMenu.addComponent(logo); labelLogo = new Label("Ender Mail", 100, 46); @@ -214,7 +212,7 @@ public void init(@Nullable CompoundTag intent) { RenderSystem.setShaderTexture(0, ENDER_MAIL_BACKGROUND); RenderUtil.drawRectWithTexture(ENDER_MAIL_BACKGROUND, graphics, x, y, 0, 0, width, height, 640, 360, 640, 360); - Color temp = new Color(Laptop.getSystem().getSettings().getColorScheme().getBackgroundColor()); + Color temp = new Color(MineOS.getOpened().getSettings().getColorScheme().getBackgroundColor()); Color color = new Color(temp.getRed(), temp.getGreen(), temp.getBlue(), 150); graphics.fill(x, y, x + 125, y + height, color.getRGB()); graphics.fill(x + 125, y, x + 126, y + height, color.darker().getRGB()); @@ -226,7 +224,7 @@ public void init(@Nullable CompoundTag intent) { graphics.fill(x + 130, y + 35, x + width - 5, y + height - 5, new Color(1f, 1f, 1f, 0.25f).getRGB()); RenderUtil.drawStringClipped(graphics, e.getSubject(), x + 135, y + 10, 120, Color.WHITE.getRGB(), true); RenderUtil.drawStringClipped(graphics, e.getAuthor() + "@endermail.official", x + 135, y + 22, 120, Color.LIGHT_GRAY.getRGB(), false); - graphics.drawWordWrap(Laptop.getFont(), FormattedText.of(e.getMessage()), x + 135, y + 40, 115, Color.WHITE.getRGB()); + graphics.drawWordWrap(MineOS.getFont(), FormattedText.of(e.getMessage()), x + 135, y + 40, 115, Color.WHITE.getRGB()); } }); diff --git a/common/src/main/java/com/ultreon/devices/programs/email/EmailManager.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/EmailManager.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/programs/email/EmailManager.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/EmailManager.java index a16a06ac3..1c0b7a4f4 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/EmailManager.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/EmailManager.java @@ -1,11 +1,11 @@ -package com.ultreon.devices.programs.email; +package dev.ultreon.devices.mineos.apps.email; import com.google.common.collect.HashBiMap; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.WorldSavedData; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Notification; -import com.ultreon.devices.programs.email.object.Email; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.WorldSavedData; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Notification; +import dev.ultreon.devices.mineos.apps.email.object.Email; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.nbt.CompoundTag; @@ -71,6 +71,7 @@ public String getName(Player player) { return uuidToName.get(player.getUUID()); } + @Override public void load(CompoundTag nbt) { nameToInbox.clear(); @@ -100,6 +101,7 @@ public void load(CompoundTag nbt) { } } + @Override public void save(CompoundTag nbt) { ListTag inboxes = new ListTag(); for (String key : nameToInbox.keySet()) { @@ -135,7 +137,7 @@ public void clear() { } private void sendNotification(String name, Email email) { - MinecraftServer server = Devices.getServer(); + MinecraftServer server = UltreonDevicesMod.getServer(); UUID id = uuidToName.inverse().get(name); if (id != null) { ServerPlayer player = server.getPlayerList().getPlayer(id); diff --git a/common/src/main/java/dev/ultreon/devices/mineos/apps/email/object/Contact.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/object/Contact.java new file mode 100644 index 000000000..68757fb1e --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/object/Contact.java @@ -0,0 +1,19 @@ +package dev.ultreon.devices.mineos.apps.email.object; + +import net.minecraft.nbt.CompoundTag; + +/** + * @author MrCrayfish + */ +public record Contact(String nickname, String email) { + + @Override + public String toString() { + return nickname; + } + + public void save(CompoundTag contactTag) { + contactTag.putString("nickname", nickname); + contactTag.putString("email", email); + } +} diff --git a/common/src/main/java/com/ultreon/devices/programs/email/object/Email.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/object/Email.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/programs/email/object/Email.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/object/Email.java index 9c83f6be0..a61669533 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/object/Email.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/object/Email.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.programs.email.object; +package dev.ultreon.devices.mineos.apps.email.object; -import com.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.io.File; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; - import org.jetbrains.annotations.Nullable; /** diff --git a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskCheckEmailAccount.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskCheckEmailAccount.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/programs/email/task/TaskCheckEmailAccount.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskCheckEmailAccount.java index 97b4499ad..70a38f3f3 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskCheckEmailAccount.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskCheckEmailAccount.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.email.task; +package dev.ultreon.devices.mineos.apps.email.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.email.EmailManager; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.email.EmailManager; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -30,7 +30,7 @@ public void processRequest(CompoundTag tag, Level level, Player player) { @Override public void prepareResponse(CompoundTag tag) { - if (this.isSucessful()) tag.putString("Name", this.name); + if (this.isSuccessful()) tag.putString("Name", this.name); } @Override diff --git a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskDeleteEmail.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskDeleteEmail.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/programs/email/task/TaskDeleteEmail.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskDeleteEmail.java index 9702f271e..2abbc40d2 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskDeleteEmail.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskDeleteEmail.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.email.task; +package dev.ultreon.devices.mineos.apps.email.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.email.EmailManager; -import com.ultreon.devices.programs.email.object.Email; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.email.EmailManager; +import dev.ultreon.devices.mineos.apps.email.object.Email; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskRegisterEmailAccount.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskRegisterEmailAccount.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/programs/email/task/TaskRegisterEmailAccount.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskRegisterEmailAccount.java index a7d20cde5..66f1c83f8 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskRegisterEmailAccount.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskRegisterEmailAccount.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.email.task; +package dev.ultreon.devices.mineos.apps.email.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.email.EmailManager; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.email.EmailManager; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskSendEmail.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskSendEmail.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/programs/email/task/TaskSendEmail.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskSendEmail.java index ee7bc30d5..1953adb6a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskSendEmail.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskSendEmail.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.email.task; +package dev.ultreon.devices.mineos.apps.email.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.email.EmailManager; -import com.ultreon.devices.programs.email.object.Email; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.email.EmailManager; +import dev.ultreon.devices.mineos.apps.email.object.Email; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskUpdateInbox.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskUpdateInbox.java similarity index 86% rename from common/src/main/java/com/ultreon/devices/programs/email/task/TaskUpdateInbox.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskUpdateInbox.java index 3d350dda6..d9eb320db 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskUpdateInbox.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskUpdateInbox.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.email.task; +package dev.ultreon.devices.mineos.apps.email.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.email.EmailManager; -import com.ultreon.devices.programs.email.object.Email; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.email.EmailManager; +import dev.ultreon.devices.mineos.apps.email.object.Email; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskViewEmail.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskViewEmail.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/programs/email/task/TaskViewEmail.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskViewEmail.java index f0a4027a8..9fefd4c3f 100644 --- a/common/src/main/java/com/ultreon/devices/programs/email/task/TaskViewEmail.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/email/task/TaskViewEmail.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.email.task; +package dev.ultreon.devices.mineos.apps.email.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.programs.email.EmailManager; -import com.ultreon.devices.programs.email.object.Email; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.mineos.apps.email.EmailManager; +import dev.ultreon.devices.mineos.apps.email.object.Email; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/programs/example/ExampleApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/example/ExampleApp.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/programs/example/ExampleApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/example/ExampleApp.java index 74ea0ac48..8fdb46959 100644 --- a/common/src/main/java/com/ultreon/devices/programs/example/ExampleApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/example/ExampleApp.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.programs.example; +package dev.ultreon.devices.mineos.apps.example; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.component.*; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.programs.example.task.TaskNotificationTest; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.mineos.apps.example.task.TaskNotificationTest; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/com/ultreon/devices/programs/example/task/TaskNotificationTest.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/example/task/TaskNotificationTest.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/programs/example/task/TaskNotificationTest.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/example/task/TaskNotificationTest.java index b0e593c27..2dbd0f47b 100644 --- a/common/src/main/java/com/ultreon/devices/programs/example/task/TaskNotificationTest.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/example/task/TaskNotificationTest.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.example.task; +package dev.ultreon.devices.mineos.apps.example.task; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Notification; -import com.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Notification; +import dev.ultreon.devices.api.task.Task; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/GitWebApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/GitWebApp.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/GitWebApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/GitWebApp.java index dee11291d..cea696d0a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/GitWebApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/GitWebApp.java @@ -1,20 +1,22 @@ -package com.ultreon.devices.programs.gitweb; - -import com.ultreon.devices.api.app.System; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Spinner; -import com.ultreon.devices.api.app.component.TextField; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.layout.TextLayout; -import com.ultreon.devices.programs.system.SettingsApp; -import com.ultreon.devices.programs.system.layout.StandardLayout; -import com.ultreon.devices.util.DataHandler; -import net.minecraft.client.gui.Gui; +package dev.ultreon.devices.mineos.apps.gitweb; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.SystemAccessor; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Spinner; +import dev.ultreon.devices.api.app.component.TextField; +import dev.ultreon.devices.mineos.MineOSSystem; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.gitweb.layout.TextLayout; +import dev.ultreon.devices.mineos.apps.system.SettingsApp; +import dev.ultreon.devices.mineos.apps.system.layout.StandardLayout; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.DataHandler; import net.minecraft.nbt.CompoundTag; - import org.jetbrains.annotations.Nullable; + import java.awt.*; import java.util.Optional; @@ -35,9 +37,9 @@ public class GitWebApp extends Application implements SystemAccessor, DataHandle private Spinner spinnerLoading; private TextLayout scrollable; - private System system; + private MineOSSystem system; - public Optional getSystem() { + public Optional getSystem() { return Optional.ofNullable(system); } @@ -45,7 +47,7 @@ public Optional getSystem() { public void init(@Nullable CompoundTag intent) { layoutBrowser = new StandardLayout(null, 362, 240, this, null); layoutBrowser.setBackground((graphics, mc, x, y, width, height, mouseX, mouseY, windowActive) -> { - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getItemBackgroundColor()); + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getItemBackgroundColor()); graphics.fill(x, y + 21, x + width, y + 164, color.getRGB()); }); @@ -132,7 +134,7 @@ public void save(CompoundTag tag) { } @Override - public void sendSystem(System system) { + public void sendSystem(MineOSSystem system) { this.system = system; } } diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/GitWebFrame.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/GitWebFrame.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/component/GitWebFrame.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/GitWebFrame.java index e69e541f1..84cc00521 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/GitWebFrame.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/GitWebFrame.java @@ -1,17 +1,17 @@ -package com.ultreon.devices.programs.gitweb.component; - -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.ScrollableLayout; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.api.utils.OnlineRequest; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.programs.gitweb.layout.ModuleLayout; -import com.ultreon.devices.programs.gitweb.module.Module; -import com.ultreon.devices.programs.gitweb.module.*; -import com.ultreon.devices.util.SiteRegistration; +package dev.ultreon.devices.mineos.apps.gitweb.component; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.ScrollableLayout; +import dev.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.api.utils.OnlineRequest; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.gitweb.layout.ModuleLayout; +import dev.ultreon.devices.mineos.apps.gitweb.module.Module; +import dev.ultreon.devices.mineos.apps.gitweb.module.*; +import dev.ultreon.devices.util.SiteRegistration; import net.minecraft.client.Minecraft; import java.io.BufferedWriter; @@ -342,7 +342,7 @@ private void generateLayout(String websiteData, boolean dynamic) { offset += height; } - if (modules.size() > 0) { + if (!modules.isEmpty()) { ModuleEntry entry = modules.get(modules.size() - 1); Module module = entry.getModule(); int height = module.calculateHeight(entry.getData(), width); diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/AnvilBox.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/AnvilBox.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/AnvilBox.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/AnvilBox.java index feaf30199..f477fcd97 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/AnvilBox.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/AnvilBox.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.gitweb.component.container; +package dev.ultreon.devices.mineos.apps.gitweb.component.container; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/BrewingBox.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/BrewingBox.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/BrewingBox.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/BrewingBox.java index 3455c8092..684aeca94 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/BrewingBox.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/BrewingBox.java @@ -1,8 +1,7 @@ -package com.ultreon.devices.programs.gitweb.component.container; +package dev.ultreon.devices.mineos.apps.gitweb.component.container; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.world.item.ItemStack; @@ -44,7 +43,7 @@ protected void handleTick() { } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); RenderSystem.setShaderTexture(0, CONTAINER_BOXES_TEXTURE); diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/ContainerBox.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/ContainerBox.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/ContainerBox.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/ContainerBox.java index d124fa786..f7c23ad87 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/ContainerBox.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/ContainerBox.java @@ -1,14 +1,14 @@ -package com.ultreon.devices.programs.gitweb.component.container; +package dev.ultreon.devices.mineos.apps.gitweb.component.container; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Reference; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -39,12 +39,12 @@ public ContainerBox(int left, int top, int boxU, int boxV, int height, ItemStack } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { RenderSystem.setShaderTexture(0, CONTAINER_BOXES_TEXTURE); RenderUtil.drawRectWithTexture(CONTAINER_BOXES_TEXTURE, graphics, x, y + 12, boxU, boxV, WIDTH, height, WIDTH, height, 256, 256); //Gui.blit(pose, x, y + 12, WIDTH, height, boxU, boxV, 256, 256, WIDTH, height); - int contentOffset = (WIDTH - (Laptop.getFont().width(title) + 8 + 4)) / 2; + int contentOffset = (WIDTH - (MineOS.getFont().width(title) + 8 + 4)) / 2; graphics.pose().pushPose(); { graphics.pose().translate(x + contentOffset, y, 0); @@ -59,7 +59,7 @@ protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, } @Override - protected void renderOverlay(GuiGraphics graphics, Laptop laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { + protected void renderOverlay(GuiGraphics graphics, MineOS laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { slots.forEach(slot -> slot.renderOverlay(graphics, laptop, xPosition, yPosition + 12, mouseX, mouseY)); } @@ -78,10 +78,10 @@ public void render(GuiGraphics graphics, int x, int y) { RenderUtil.renderItem(graphics, x + slotX, y + slotY, stack, true); } - public void renderOverlay(GuiGraphics graphics, Laptop laptop, int x, int y, int mouseX, int mouseY) { + public void renderOverlay(GuiGraphics graphics, MineOS laptop, int x, int y, int mouseX, int mouseY) { if (GuiHelper.isMouseWithin(mouseX, mouseY, x + slotX, y + slotY, 16, 16)) { if (!stack.isEmpty()) { - graphics.renderTooltip(Minecraft.getInstance().font, laptop.getTooltipFromItem(Minecraft.getInstance(), stack), Optional.empty(), mouseX, mouseY/*, stack*/); + graphics.renderTooltip(Minecraft.getInstance().font, Screen.getTooltipFromItem(Minecraft.getInstance(), stack), Optional.empty(), mouseX, mouseY/*, stack*/); } } diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/CraftingBox.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/CraftingBox.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/CraftingBox.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/CraftingBox.java index c274e1116..824ec3812 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/CraftingBox.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/CraftingBox.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.gitweb.component.container; +package dev.ultreon.devices.mineos.apps.gitweb.component.container; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/FurnaceBox.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/FurnaceBox.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/FurnaceBox.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/FurnaceBox.java index 9f2f2b3b3..984269a02 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/FurnaceBox.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/FurnaceBox.java @@ -1,10 +1,8 @@ -package com.ultreon.devices.programs.gitweb.component.container; +package dev.ultreon.devices.mineos.apps.gitweb.component.container; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Devices; -import com.ultreon.devices.core.Laptop; -import dev.architectury.injectables.annotations.ExpectPlatform; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.world.item.ItemStack; @@ -26,12 +24,12 @@ public FurnaceBox(ItemStack input, ItemStack fuel, ItemStack result) { slots.add(new Slot(26, 8, input)); slots.add(new Slot(26, 44, fuel)); slots.add(new Slot(85, 26, result)); - this.fuelTime = Devices.getInstance().getBurnTime(fuel, RecipeType.SMELTING); + this.fuelTime = UltreonDevicesMod.get().getBurnTime(fuel, RecipeType.SMELTING); } @Deprecated private static int getBurnTime(ItemStack stack, RecipeType type) { - return Devices.getInstance().getBurnTime(stack, type); + return UltreonDevicesMod.get().getBurnTime(stack, type); } @Override @@ -45,7 +43,7 @@ protected void handleTick() { } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); RenderSystem.setShaderTexture(0, CONTAINER_BOXES_TEXTURE); diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/LoomBox.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/LoomBox.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/LoomBox.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/LoomBox.java index 192ddbab6..7df138de9 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/component/container/LoomBox.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/component/container/LoomBox.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.programs.gitweb.component.container; +package dev.ultreon.devices.mineos.apps.gitweb.component.container; import com.mojang.blaze3d.platform.Lighting; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.datafixers.util.Pair; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.model.geom.ModelLayers; @@ -51,16 +50,15 @@ public LoomBox(ItemStack banner, ItemStack dye, ItemStack pattern, ItemStack res } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); - int i = x;//this.leftPos; int j = y+12;//this.topPos; if (result.isEmpty())return; Lighting.setupForFlatItems(); MultiBufferSource.BufferSource bufferSource = mc.renderBuffers().bufferSource(); graphics.pose().pushPose(); //pose.translate((double)(i + 139), (double)(j + 52), 0.0D); - graphics.pose().translate(i+90d,j+52d,0.0D); + graphics.pose().translate(x +90d,j+52d,0.0D); graphics.pose().scale(24.0F, -24.0F, 1.0F); graphics.pose().translate(0.5D, 0.5D, 0.5D); float f = 0.6666667F; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/layout/ModuleLayout.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/layout/ModuleLayout.java similarity index 77% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/layout/ModuleLayout.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/layout/ModuleLayout.java index 99dfbf9c0..8922dc4e8 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/layout/ModuleLayout.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/layout/ModuleLayout.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.gitweb.layout; +package dev.ultreon.devices.mineos.apps.gitweb.layout; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.module.ModuleEntry; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.gitweb.module.ModuleEntry; public class ModuleLayout extends Layout { public ModuleEntry entry; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/layout/TextLayout.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/layout/TextLayout.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/layout/TextLayout.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/layout/TextLayout.java index 4f907ade4..a3f346198 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/layout/TextLayout.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/layout/TextLayout.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.gitweb.layout; +package dev.ultreon.devices.mineos.apps.gitweb.layout; -import com.ultreon.devices.api.app.ScrollableLayout; -import com.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.api.app.ScrollableLayout; +import dev.ultreon.devices.api.app.component.Text; /** * @author MrCrayfish diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/AnvilModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/AnvilModule.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/AnvilModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/AnvilModule.java index b341b563c..95df9d171 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/AnvilModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/AnvilModule.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.programs.gitweb.component.container.AnvilBox; -import com.ultreon.devices.programs.gitweb.component.container.ContainerBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.AnvilBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.ContainerBox; import net.minecraft.world.item.ItemStack; import java.util.ArrayList; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/AppLinkModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/AppLinkModule.java similarity index 71% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/AppLinkModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/AppLinkModule.java index 026c7ca5c..19d1395fb 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/AppLinkModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/AppLinkModule.java @@ -1,14 +1,14 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.gitweb.GitWebApp; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.system.AppStore; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.gitweb.GitWebApp; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.system.AppStore; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.resources.ResourceLocation; import java.util.Map; @@ -44,7 +44,7 @@ public void generate(GitWebFrame frame, Layout layout, int width, Map { DebugLog.log("OPENING APP"); var b = a.openApplication(ApplicationManager.getApplication(ResourceLocation.tryParse("devices:app_store"))); - if (b != null && b instanceof AppStore store) { + if (b instanceof AppStore store) { store.queueOpen(info); } }); diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/BannerIIModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BannerIIModule.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/BannerIIModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BannerIIModule.java index 0c023912d..a3d847d03 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/BannerIIModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BannerIIModule.java @@ -1,15 +1,12 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; import com.mojang.blaze3d.platform.Lighting; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.datafixers.util.Pair; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.component.container.ContainerBox; -import com.ultreon.devices.programs.gitweb.component.container.LoomBox; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.model.geom.ModelLayers; @@ -23,7 +20,6 @@ import net.minecraft.world.item.BannerItem; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BannerBlockEntity; import net.minecraft.world.level.block.entity.BannerPattern; @@ -31,7 +27,7 @@ import java.util.List; import java.util.Map; -import static com.ultreon.devices.programs.gitweb.module.ContainerModule.getItem; +import static dev.ultreon.devices.mineos.apps.gitweb.module.ContainerModule.getItem; public class BannerIIModule extends Module { @Override @@ -76,16 +72,14 @@ public LoomBox(ItemStack banner, boolean waving) { } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); - int i = x;//this.leftPos; - int j = y;//this.topPos; if (banner.isEmpty())return; Lighting.setupForFlatItems(); MultiBufferSource.BufferSource bufferSource = mc.renderBuffers().bufferSource(); graphics.pose().pushPose(); //pose.translate((double)(i + 139), (double)(j + 52), 0.0D); - graphics.pose().translate(i+139,j+90,0.0D); + graphics.pose().translate(x +139, y +90,0.0D); graphics.pose().scale(48.0F, -48.0F, 48.0F); // pose.scale(24.0F, -24.0F, 1.0F); graphics.pose().translate(0.5D, 0.5D, 0.5D); diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/BannerModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BannerModule.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/BannerModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BannerModule.java index 5197290db..d777f0bb4 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/BannerModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BannerModule.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Image; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/BrewingModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BrewingModule.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/BrewingModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BrewingModule.java index 0450ba623..7f617c947 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/BrewingModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/BrewingModule.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.programs.gitweb.component.container.BrewingBox; -import com.ultreon.devices.programs.gitweb.component.container.ContainerBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.BrewingBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.ContainerBox; import net.minecraft.world.item.ItemStack; import java.util.ArrayList; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ContainerModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ContainerModule.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/ContainerModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ContainerModule.java index 948526bb8..33a02c0e7 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ContainerModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ContainerModule.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.component.container.ContainerBox; -import com.ultreon.devices.programs.gitweb.component.container.CraftingBox; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.ContainerBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.CraftingBox; import net.minecraft.ChatFormatting; import net.minecraft.nbt.TagParser; import net.minecraft.world.item.ItemStack; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/CraftingModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/CraftingModule.java similarity index 83% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/CraftingModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/CraftingModule.java index 07ce2a1a2..d04b42d7a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/CraftingModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/CraftingModule.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.programs.gitweb.component.container.ContainerBox; -import com.ultreon.devices.programs.gitweb.component.container.CraftingBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.ContainerBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.CraftingBox; import net.minecraft.world.item.ItemStack; import java.util.ArrayList; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/DividerModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/DividerModule.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/DividerModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/DividerModule.java index da8b67589..317bc5eaf 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/DividerModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/DividerModule.java @@ -1,8 +1,7 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import net.minecraft.client.gui.Gui; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/DownloadModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/DownloadModule.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/DownloadModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/DownloadModule.java index 1db3b3df4..1d82f9851 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/DownloadModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/DownloadModule.java @@ -1,18 +1,16 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import net.minecraft.client.gui.Gui; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.TagParser; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/FooterModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/FooterModule.java similarity index 86% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/FooterModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/FooterModule.java index 070557627..5ee05831a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/FooterModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/FooterModule.java @@ -1,11 +1,10 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import net.minecraft.client.gui.Gui; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; import java.awt.*; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/FurnaceModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/FurnaceModule.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/FurnaceModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/FurnaceModule.java index b49fca683..ed99b2484 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/FurnaceModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/FurnaceModule.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.programs.gitweb.component.container.ContainerBox; -import com.ultreon.devices.programs.gitweb.component.container.FurnaceBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.ContainerBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.FurnaceBox; import net.minecraft.world.item.ItemStack; import java.util.ArrayList; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/HeaderModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/HeaderModule.java similarity index 77% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/HeaderModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/HeaderModule.java index 43121a7f4..eb41fa955 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/HeaderModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/HeaderModule.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.client.MineOS; import java.util.Map; @@ -25,9 +25,9 @@ public String[] getOptionalData() { @Override public int calculateHeight(Map data, int width) { if (data.containsKey("scale")) { - return (int) (Double.parseDouble(data.get("scale")) * Laptop.getFont().lineHeight + (data.containsKey("padding") ? Integer.parseInt(data.get("padding")) : 5) * 2); + return (int) (Double.parseDouble(data.get("scale")) * MineOS.getFont().lineHeight + (data.containsKey("padding") ? Integer.parseInt(data.get("padding")) : 5) * 2); } - return Laptop.getFont().lineHeight + (data.containsKey("padding") ? Integer.parseInt(data.get("padding")) : 5) * 2; + return MineOS.getFont().lineHeight + (data.containsKey("padding") ? Integer.parseInt(data.get("padding")) : 5) * 2; } @Override diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/LoomModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/LoomModule.java similarity index 75% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/LoomModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/LoomModule.java index e84615987..eac828d8a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/LoomModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/LoomModule.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.programs.gitweb.component.container.ContainerBox; -import com.ultreon.devices.programs.gitweb.component.container.LoomBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.ContainerBox; +import dev.ultreon.devices.mineos.apps.gitweb.component.container.LoomBox; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/Module.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/Module.java similarity index 73% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/Module.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/Module.java index 40032fbfa..0052d45c2 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/Module.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/Module.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.layout.ModuleLayout; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.gitweb.layout.ModuleLayout; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ModuleEntry.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ModuleEntry.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/ModuleEntry.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ModuleEntry.java index 4eef70f75..6785e7aca 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ModuleEntry.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ModuleEntry.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/NavigationModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/NavigationModule.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/NavigationModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/NavigationModule.java index 63f3637c6..1b19d1302 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/NavigationModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/NavigationModule.java @@ -1,12 +1,11 @@ -package com.ultreon.devices.programs.gitweb.module; - -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import net.minecraft.client.gui.Gui; +package dev.ultreon.devices.mineos.apps.gitweb.module; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; import org.jetbrains.annotations.Nullable; + import java.awt.*; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ParagraphModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ParagraphModule.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/ParagraphModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ParagraphModule.java index ab43eb763..a3380355c 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ParagraphModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ParagraphModule.java @@ -1,11 +1,11 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Image; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.layout.ModuleLayout; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.gitweb.layout.ModuleLayout; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/RedirectModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/RedirectModule.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/RedirectModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/RedirectModule.java index 9bf599e90..8c0b91a38 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/RedirectModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/RedirectModule.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.layout.ModuleLayout; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.gitweb.layout.ModuleLayout; import java.util.ArrayList; import java.util.List; diff --git a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ScriptModule.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ScriptModule.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/programs/gitweb/module/ScriptModule.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ScriptModule.java index 03ecc9249..7c05ae6e0 100644 --- a/common/src/main/java/com/ultreon/devices/programs/gitweb/module/ScriptModule.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/gitweb/module/ScriptModule.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.programs.gitweb.module; +package dev.ultreon.devices.mineos.apps.gitweb.module; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.gitweb.layout.ModuleLayout; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.gitweb.layout.ModuleLayout; import java.util.Map; diff --git a/common/src/main/java/com/ultreon/devices/programs/snake/SnakeApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/snake/SnakeApp.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/programs/snake/SnakeApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/snake/SnakeApp.java index f08bbdebb..8e55679bf 100644 --- a/common/src/main/java/com/ultreon/devices/programs/snake/SnakeApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/snake/SnakeApp.java @@ -1,12 +1,11 @@ -package com.ultreon.devices.programs.snake; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.programs.snake.layout.SnakeLayout; +package dev.ultreon.devices.mineos.apps.snake; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.mineos.apps.snake.layout.SnakeLayout; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; @@ -32,7 +31,7 @@ public void init(@Nullable CompoundTag intent) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, active, partialTicks); // for (Component component : this.titleScreen.components) { // DebugLog.log(component + "lt: " + component.left + ", " + component.top); diff --git a/common/src/main/java/com/ultreon/devices/programs/snake/layout/SnakeLayout.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/snake/layout/SnakeLayout.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/programs/snake/layout/SnakeLayout.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/snake/layout/SnakeLayout.java index f6e9da6c7..23bac44c8 100644 --- a/common/src/main/java/com/ultreon/devices/programs/snake/layout/SnakeLayout.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/snake/layout/SnakeLayout.java @@ -1,15 +1,14 @@ -package com.ultreon.devices.programs.snake.layout; +package dev.ultreon.devices.mineos.apps.snake.layout; import com.mojang.blaze3d.platform.InputConstants; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.programs.snake.SnakeApp; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.snake.SnakeApp; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import java.awt.*; @@ -22,19 +21,15 @@ public class SnakeLayout extends Layout { public SnakeLayout(SnakeApp app) { super(150, 150); var button = new Button(1, 1, Icons.ARROW_LEFT); - button.setClickListener(((mouseX, mouseY, mouseButton) -> { - app.setCurrentLayout(app.titleScreen); - })); + button.setClickListener(((mouseX, mouseY, mouseButton) -> app.setCurrentLayout(app.titleScreen))); - this.setBackground((graphics, mc, x, y, width, height, mouseX, mouseY, windowActive) -> { - graphics.fill(x,y,x+width,x+height, new Color(0x0, 0x0, 0x0).getRGB()); - }); + this.setBackground((graphics, mc, x, y, width, height, mouseX, mouseY, windowActive) -> graphics.fill(x,y,x+width,x+height, new Color(0x0, 0x0, 0x0).getRGB())); this.addComponent(button); this.addComponent(new Grid(0, 0)); } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); } @@ -100,7 +95,7 @@ public Grid(int left, int top) { } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); var black = new Color(0, 0, 0, 0.5f); var intBlack = black.getRGB(); diff --git a/common/src/main/java/com/ultreon/devices/programs/system/AppStore.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/AppStore.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/programs/system/AppStore.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/AppStore.java index 4ed0314f1..4c6f2e0e6 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/AppStore.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/AppStore.java @@ -1,31 +1,31 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; -import com.ultreon.devices.Devices; -import com.ultreon.devices.Reference; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.ScrollableLayout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.Spinner; -import com.ultreon.devices.api.utils.OnlineRequest; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.object.TrayItem; -import com.ultreon.devices.programs.system.component.AppGrid; -import com.ultreon.devices.programs.system.layout.LayoutAppPage; -import com.ultreon.devices.programs.system.layout.LayoutSearchApps; -import com.ultreon.devices.programs.system.object.AppEntry; -import com.ultreon.devices.programs.system.object.RemoteEntry; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.ScrollableLayout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.Spinner; +import dev.ultreon.devices.api.utils.OnlineRequest; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.TrayItem; +import dev.ultreon.devices.mineos.apps.system.component.AppGrid; +import dev.ultreon.devices.mineos.apps.system.layout.LayoutAppPage; +import dev.ultreon.devices.mineos.apps.system.layout.LayoutSearchApps; +import dev.ultreon.devices.mineos.apps.system.object.AppEntry; +import dev.ultreon.devices.mineos.apps.system.object.RemoteEntry; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; @@ -55,7 +55,7 @@ public void init(@Nullable CompoundTag intent) { ScrollableLayout homePageLayout = new ScrollableLayout(0, 0, LAYOUT_WIDTH, 368-160+80*rows, LAYOUT_HEIGHT); homePageLayout.setScrollSpeed(10); homePageLayout.setBackground((graphics, mc, x, y, width, height, mouseX, mouseY, windowActive) -> { - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getBackgroundColor()); + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getBackgroundColor()); int offset = 60; graphics.fill(x, y + offset, x + LAYOUT_WIDTH, y + offset + 1, color.brighter().getRGB()); graphics.fill(x, y + offset + 1, x + LAYOUT_WIDTH, y + offset + 19, color.getRGB()); @@ -67,7 +67,7 @@ public void init(@Nullable CompoundTag intent) { graphics.fill(x, y + offset + 19, x + LAYOUT_WIDTH, y + offset + 20, color.darker().getRGB()); }); - com.ultreon.devices.api.app.component.Image imageBanner = new com.ultreon.devices.api.app.component.Image(0, 0, LAYOUT_WIDTH, 60); + Image imageBanner = new Image(0, 0, LAYOUT_WIDTH, 60); imageBanner.setImage(new ResourceLocation(Reference.MOD_ID, "textures/gui/app_market_background.png")); imageBanner.setDrawFull(true); homePageLayout.addComponent(imageBanner); @@ -85,7 +85,7 @@ public void init(@Nullable CompoundTag intent) { btnManageApps.setToolTip("Manage Apps", "Manage your installed applications"); homePageLayout.addComponent(btnManageApps); - com.ultreon.devices.api.app.component.Image image = new com.ultreon.devices.api.app.component.Image(5, 33, 20, 20, Icons.SHOP); + Image image = new Image(5, 33, 20, 20, Icons.SHOP); homePageLayout.addComponent(image); Label labelBanner = new Label("App Market", 32, 35); @@ -176,7 +176,7 @@ public List parseJson(String json) { } public void openApplication(AppEntry entry) { - Layout layout = new LayoutAppPage(getLaptop(), entry, this); + Layout layout = new LayoutAppPage(getOS(), entry, this); this.setCurrentLayout(layout); Button btnPrevious = new Button(2, 2, Icons.ARROW_LEFT); btnPrevious.setClickListener((mouseX1, mouseY1, mouseButton1) -> this.setCurrentLayout(layoutMain)); @@ -190,14 +190,14 @@ private List shuffleAndShrink(List list, int newSize) { public static class StoreTrayItem extends TrayItem { public StoreTrayItem() { - super(Icons.SHOP, Devices.id("app_store")); + super(Icons.SHOP, UltreonDevicesMod.id("app_store")); } @Override public void handleClick(int mouseX, int mouseY, int mouseButton) { - AppInfo info = ApplicationManager.getApplication(Devices.id("app_store")); + AppInfo info = ApplicationManager.getApplication(UltreonDevicesMod.id("app_store")); if (info != null) { - Laptop.getSystem().openApplication(info); + MineOS.getOpened().openApplication(info); } } } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/BankApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/BankApp.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/programs/system/BankApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/BankApp.java index 9fd8fbcfd..2738624c3 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/BankApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/BankApp.java @@ -1,34 +1,27 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.Tesselator; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.api.app.component.TextField; -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.programs.system.task.TaskDeposit; -import com.ultreon.devices.programs.system.task.TaskWithdraw; -import com.ultreon.devices.util.InventoryUtil; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.api.app.component.TextField; +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.system.task.TaskDeposit; +import dev.ultreon.devices.mineos.apps.system.task.TaskWithdraw; +import dev.ultreon.devices.util.InventoryUtil; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.screens.inventory.InventoryScreen; -import net.minecraft.client.model.geom.ModelLayers; -import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.entity.VillagerRenderer; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.npc.Villager; import net.minecraft.world.entity.npc.VillagerData; import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.entity.npc.VillagerType; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/DiagnosticsApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/DiagnosticsApp.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/programs/system/DiagnosticsApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/DiagnosticsApp.java index e3c85b80b..8c20f9127 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/DiagnosticsApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/DiagnosticsApp.java @@ -1,13 +1,12 @@ -package com.ultreon.devices.programs.system; - -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.api.app.listener.ClickListener; -import com.ultreon.devices.object.AppInfo; +package dev.ultreon.devices.mineos.apps.system; + +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/DisplayResolution.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/DisplayResolution.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/programs/system/DisplayResolution.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/DisplayResolution.java index 9561d4904..0250bd365 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/DisplayResolution.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/DisplayResolution.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; -import com.ultreon.devices.api.video.CustomResolution; +import dev.ultreon.devices.api.video.CustomResolution; import net.minecraft.nbt.CompoundTag; public interface DisplayResolution { diff --git a/common/src/main/java/com/ultreon/devices/programs/system/FileBrowserApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/FileBrowserApp.java similarity index 57% rename from common/src/main/java/com/ultreon/devices/programs/system/FileBrowserApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/FileBrowserApp.java index e521279b7..477902e70 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/FileBrowserApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/FileBrowserApp.java @@ -1,14 +1,14 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.object.TrayItem; -import com.ultreon.devices.programs.system.component.FileBrowser; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.mineos.apps.system.component.FileBrowser; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.TrayItem; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; @@ -40,14 +40,14 @@ public void save(CompoundTag tag) { public static class FileBrowserTrayItem extends TrayItem { public FileBrowserTrayItem() { - super(Icons.FOLDER, Devices.id("file_browser")); + super(Icons.FOLDER, UltreonDevicesMod.id("file_browser")); } @Override public void handleClick(int mouseX, int mouseY, int mouseButton) { - AppInfo info = ApplicationManager.getApplication(Devices.id("file_browser")); + AppInfo info = ApplicationManager.getApplication(UltreonDevicesMod.id("file_browser")); if (info != null) { - Laptop.getSystem().openApplication(info); + MineOS.getOpened().openApplication(info); } } } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/PredefinedResolution.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/PredefinedResolution.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/programs/system/PredefinedResolution.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/PredefinedResolution.java index b29c8f699..b7829e8c1 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/PredefinedResolution.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/PredefinedResolution.java @@ -1,10 +1,8 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; -import com.ultreon.devices.core.Laptop; -import net.minecraft.network.chat.Component; +import dev.ultreon.devices.mineos.client.MineOS; import java.util.Collection; -import java.util.Collections; public enum PredefinedResolution implements DisplayResolution { PREDEFINED_31360x17280(31360, 17280), @@ -41,7 +39,7 @@ public int height() { } public static PredefinedResolution[] getResolutionList() { - Collection resolutionList = Laptop.getInstance().getVideoInfo().getResolutionList(); + Collection resolutionList = MineOS.getOpened().getVideoInfo().getResolutionList(); if (resolutionList == null) { return new PredefinedResolution[0]; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/SettingsApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/SettingsApp.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/programs/system/SettingsApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/SettingsApp.java index a4939dce1..b7583c6f7 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/SettingsApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/SettingsApp.java @@ -1,26 +1,27 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; import com.google.common.base.CaseFormat; -import com.ultreon.devices.Devices; -import com.ultreon.devices.Reference; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.ScrollableLayout; -import com.ultreon.devices.api.app.component.*; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.renderer.ItemRenderer; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.utils.OnlineRequest; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.Settings; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.object.TrayItem; -import com.ultreon.devices.programs.system.component.Palette; -import com.ultreon.devices.programs.system.object.ColorScheme; -import com.ultreon.devices.programs.system.object.ColorSchemePresetRegistry; -import com.ultreon.devices.programs.system.object.Preset; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.ScrollableLayout; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.renderer.ItemRenderer; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.utils.OnlineRequest; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.mineos.client.Settings; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.TrayItem; +import dev.ultreon.devices.mineos.apps.system.component.Palette; +import dev.ultreon.devices.mineos.apps.system.object.ColorScheme; +import dev.ultreon.devices.mineos.apps.system.object.ColorSchemePresetRegistry; +import dev.ultreon.devices.mineos.apps.system.object.Preset; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; @@ -56,7 +57,7 @@ public class SettingsApp extends SystemApp { private void resetColorSchemeClick(int mouseX, int mouseY, int mouseButton) { if (mouseButton == 0) { - Laptop.getSystem().getSettings().getColorScheme().resetDefault(); + MineOS.getOpened().getSettings().getColorScheme().resetDefault(); } } @@ -148,7 +149,7 @@ private Button createAboutButton(Menu layoutMain) { // // Credits: // - MrCrayfish (https://mrcrayfish.com/) -// - Qboi123 +// - XyperCode // - Jab125 // - lizterzapzap // - MrBean6000 @@ -182,7 +183,7 @@ public void render(GuiGraphics graphics, PredefinedResolution resolution, Minecr }); comboDisplayResolutions.setChangeListener((oldValue, newValue) -> { if (newValue != null) { - getLaptop().setDisplayResolution(newValue); + getOS().setDisplayResolution(newValue); } }); @@ -238,7 +239,7 @@ private Layout createColorSchemesLayout() { final Layout layoutColorSchemes = new Menu("Themes"); layoutColorSchemes.addComponent(backBtn); - Preset custom = new Preset(null, Devices.id("custom")); + Preset custom = new Preset(null, UltreonDevicesMod.id("custom")); ItemList list = new ItemList<>(0, 21, layoutColorSchemes.width, layoutColorSchemes.height - 21); for (Preset colorScheme : ColorSchemePresetRegistry.getValues()) { @@ -248,14 +249,14 @@ private Layout createColorSchemesLayout() { list.setItemClickListener((preset, index, button) -> { if (preset == custom) preset = null; - Laptop.getSystem().getSettings().setPreset(preset); + MineOS.getOpened().getSettings().setPreset(preset); }); list.setListItemRenderer(new ListItemRenderer<>(20) { @Override public void render(GuiGraphics graphics, Preset scheme, Minecraft mc, int x, int y, int width, int height, boolean selected) { ResourceLocation key = ColorSchemePresetRegistry.getKey(scheme); - if (key == null) key = Devices.id("custom"); + if (key == null) key = UltreonDevicesMod.id("custom"); graphics.drawString(mc.font, CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, key.getPath()).replaceAll("[A-Z]", " $0").substring(1), x + 5, y + 5, Color.WHITE.getRGB()); } }); @@ -275,31 +276,31 @@ private Layout createColorSchemeLayout() { layoutColorScheme.addComponent(backBtn); ComboBox.Custom comboBoxTextColor = createColorPicker(145, 26); - comboBoxTextColor.setValue(Laptop.getSystem().getSettings().getColorScheme().getTextColor()); + comboBoxTextColor.setValue(MineOS.getOpened().getSettings().getColorScheme().getTextColor()); layoutColorScheme.addComponent(comboBoxTextColor); ComboBox.Custom comboBoxTextSecondaryColor = createColorPicker(145, 44); - comboBoxTextSecondaryColor.setValue(Laptop.getSystem().getSettings().getColorScheme().getTextSecondaryColor()); + comboBoxTextSecondaryColor.setValue(MineOS.getOpened().getSettings().getColorScheme().getTextSecondaryColor()); layoutColorScheme.addComponent(comboBoxTextSecondaryColor); ComboBox.Custom comboBoxHeaderColor = createColorPicker(145, 62); - comboBoxHeaderColor.setValue(Laptop.getSystem().getSettings().getColorScheme().getHeaderColor()); + comboBoxHeaderColor.setValue(MineOS.getOpened().getSettings().getColorScheme().getHeaderColor()); layoutColorScheme.addComponent(comboBoxHeaderColor); ComboBox.Custom comboBoxBackgroundColor = createColorPicker(145, 80); - comboBoxBackgroundColor.setValue(Laptop.getSystem().getSettings().getColorScheme().getBackgroundColor()); + comboBoxBackgroundColor.setValue(MineOS.getOpened().getSettings().getColorScheme().getBackgroundColor()); layoutColorScheme.addComponent(comboBoxBackgroundColor); ComboBox.Custom comboBoxBackgroundSecondaryColor = createColorPicker(145, 98); - comboBoxBackgroundSecondaryColor.setValue(Laptop.getSystem().getSettings().getColorScheme().getBackgroundSecondaryColor()); + comboBoxBackgroundSecondaryColor.setValue(MineOS.getOpened().getSettings().getColorScheme().getBackgroundSecondaryColor()); layoutColorScheme.addComponent(comboBoxBackgroundSecondaryColor); ComboBox.Custom comboBoxItemBackgroundColor = createColorPicker(145, 116); - comboBoxItemBackgroundColor.setValue(Laptop.getSystem().getSettings().getColorScheme().getItemBackgroundColor()); + comboBoxItemBackgroundColor.setValue(MineOS.getOpened().getSettings().getColorScheme().getItemBackgroundColor()); layoutColorScheme.addComponent(comboBoxItemBackgroundColor); ComboBox.Custom comboBoxItemHighlightColor = createColorPicker(145, 134); - comboBoxItemHighlightColor.setValue(Laptop.getSystem().getSettings().getColorScheme().getItemHighlightColor()); + comboBoxItemHighlightColor.setValue(MineOS.getOpened().getSettings().getColorScheme().getItemHighlightColor()); layoutColorScheme.addComponent(comboBoxItemHighlightColor); buttonColorSchemeApply = new Button(5, 79, Icons.CHECK); @@ -308,7 +309,7 @@ private Layout createColorSchemeLayout() { buttonColorSchemeApply.setClickListener((mouseX, mouseY, mouseButton) -> { if (mouseButton == 0) { - ColorScheme colorScheme = Laptop.getSystem().getSettings().getColorScheme(); + ColorScheme colorScheme = MineOS.getOpened().getSettings().getColorScheme(); colorScheme.setTextColor(comboBoxTextColor.getValue()); colorScheme.setTextSecondaryColor(comboBoxTextSecondaryColor.getValue()); colorScheme.setHeaderColor(comboBoxHeaderColor.getValue()); @@ -334,10 +335,10 @@ private Layout addWallpaperLayout() { Layout wallpaperLayout = new Menu("Wallpaper"); // Wallpaper image. - var image = new com.ultreon.devices.api.app.component.Image(6, 29, 6+122, 29+70); + var image = new Image(6, 29, 6+122, 29+70); image.setBorderThickness(1); image.setBorderVisible(true); - image.setImage(Objects.requireNonNull(getLaptop()).getCurrentWallpaper()); + image.setImage(Objects.requireNonNull(getOS()).getCurrentWallpaper()); wallpaperLayout.addComponent(image); // Previous wallpaper button. @@ -347,13 +348,13 @@ private Layout addWallpaperLayout() { if (mouseButton != 0) return; - Laptop laptop = getLaptop(); + MineOS laptop = getOS(); if (laptop != null) { laptop.prevWallpaper(); - image.setImage(getLaptop().getCurrentWallpaper()); + image.setImage(getOS().getCurrentWallpaper()); } }); - prevWallpaperBtn.setEnabled(getLaptop().getCurrentWallpaper().isBuiltIn()); + prevWallpaperBtn.setEnabled(getOS().getCurrentWallpaper().isBuiltIn()); wallpaperLayout.addComponent(prevWallpaperBtn); // Next wallpaper button. @@ -363,23 +364,23 @@ private Layout addWallpaperLayout() { if (mouseButton != 0) return; - Laptop laptop = getLaptop(); + MineOS laptop = getOS(); if (laptop != null) { laptop.nextWallpaper(); - image.setImage(getLaptop().getCurrentWallpaper()); + image.setImage(getOS().getCurrentWallpaper()); } }); - nextWallpaperBtn.setEnabled(getLaptop().getCurrentWallpaper().isBuiltIn()); + nextWallpaperBtn.setEnabled(getOS().getCurrentWallpaper().isBuiltIn()); wallpaperLayout.addComponent(nextWallpaperBtn); // Reset wallpaper button. Button resetWallpaperBtn = new Button(6, 100, "Reset Wallpaper"); resetWallpaperBtn.setClickListener((mouseX, mouseY, mouseButton) -> { if (mouseButton == 0) { - getLaptop().setWallpaper(0); - image.setImage(getLaptop().getCurrentWallpaper()); - prevWallpaperBtn.setEnabled(getLaptop().getCurrentWallpaper().isBuiltIn()); - nextWallpaperBtn.setEnabled(getLaptop().getCurrentWallpaper().isBuiltIn()); + getOS().setWallpaper(0); + image.setImage(getOS().getCurrentWallpaper()); + prevWallpaperBtn.setEnabled(getOS().getCurrentWallpaper().isBuiltIn()); + nextWallpaperBtn.setEnabled(getOS().getCurrentWallpaper().isBuiltIn()); } }); resetWallpaperBtn.top = wallpaperLayout.height - resetWallpaperBtn.getHeight() - 5; @@ -397,15 +398,15 @@ private Layout addWallpaperLayout() { Dialog.Input dialog = new Dialog.Input("Enter the URL of the image"); dialog.setResponseHandler((success, string) -> { - if (getLaptop() != null) { - if (!OnlineRequest.isSafeAddress(string)) { + if (getOS() != null) { + if (OnlineRequest.isUnsafeAddress(string)) { openDialog(new Dialog.Message("Unsafe website.")); return false; } - getLaptop().setWallpaper(string); - image.setImage(getLaptop().getCurrentWallpaper()); - prevWallpaperBtn.setEnabled(getLaptop().getCurrentWallpaper().isBuiltIn()); - nextWallpaperBtn.setEnabled(getLaptop().getCurrentWallpaper().isBuiltIn()); + getOS().setWallpaper(string); + image.setImage(getOS().getCurrentWallpaper()); + prevWallpaperBtn.setEnabled(getOS().getCurrentWallpaper().isBuiltIn()); + nextWallpaperBtn.setEnabled(getOS().getCurrentWallpaper().isBuiltIn()); } return success; }); @@ -414,7 +415,7 @@ private Layout addWallpaperLayout() { wallpaperLayout.addComponent(urlWallpaperBtn); var wallpaperText = new Text("Wallpaper", image.left+3, image.top+3, image.componentWidth-6); wallpaperText.setShadow(true); - wallpaperText.setTextColor(new Color(getLaptop().getSettings().getColorScheme().getTextColor())); + wallpaperText.setTextColor(new Color(getOS().getSettings().getColorScheme().getTextColor())); wallpaperLayout.addComponent(wallpaperText); return wallpaperLayout; @@ -456,9 +457,9 @@ private void colorSchemeClick(int mouseX, int mouseY, int mouseButton) { private void showAllAppsClick(int mouseX, int mouseY, int mouseButton) { Settings.setShowAllApps(checkBoxShowApps.isSelected()); - Laptop laptop = getLaptop(); + MineOS laptop = getOS(); assert laptop != null; - laptop.getTaskBar().setupApplications(laptop.getApplications()); + laptop.getTaskBar().setupApplications(); } public static class Menu extends Layout { @@ -470,8 +471,8 @@ public Menu(String title) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getHeaderColor()); + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getHeaderColor()); graphics.fill(x, y, x + width, y + 20, color.getRGB()); graphics.fill(x, y + 20, x + width, y + 21, color.darker().getRGB()); graphics.drawString(mc.font, title, x + 22, y + 6, Color.WHITE.getRGB()); @@ -502,14 +503,14 @@ public void render(GuiGraphics graphics, Integer integer, Minecraft mc, int x, i public static class SettingsTrayItem extends TrayItem { public SettingsTrayItem() { - super(Icons.WRENCH, Devices.id("settings")); + super(Icons.WRENCH, UltreonDevicesMod.id("settings")); } @Override public void handleClick(int mouseX, int mouseY, int mouseButton) { - AppInfo info = ApplicationManager.getApplication(Devices.id("settings")); + AppInfo info = ApplicationManager.getApplication(UltreonDevicesMod.id("settings")); if (info != null) { - Laptop.getSystem().openApplication(info); + MineOS.getOpened().openApplication(info); } } } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/SystemApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/SystemApp.java similarity index 50% rename from common/src/main/java/com/ultreon/devices/programs/system/SystemApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/SystemApp.java index 9810b0700..ad4e2cfe6 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/SystemApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/SystemApp.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.mineos.client.MineOS; import org.jetbrains.annotations.Nullable; @@ -9,17 +9,17 @@ * Created by Casey on 03-Aug-17. */ public abstract class SystemApp extends Application { - private Laptop laptop; + private MineOS laptop; SystemApp() { } - public void setLaptop(@Nullable Laptop laptop) { + public void setOS(@Nullable MineOS laptop) { this.laptop = laptop; } @Nullable - public Laptop getLaptop() { + public MineOS getOS() { return laptop; } } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/VulnerabilityApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/VulnerabilityApp.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/programs/system/VulnerabilityApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/VulnerabilityApp.java index 3acf6d3b0..37a820e09 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/VulnerabilityApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/VulnerabilityApp.java @@ -1,29 +1,18 @@ -package com.ultreon.devices.programs.system; +package dev.ultreon.devices.mineos.apps.system; -import com.jab125.version.VersionInterval; import com.jab125.version.VersionPredicate; import com.jab125.version.VersionPredicateParser; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.ItemList; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.Text; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.system.AppStore; -import com.ultreon.devices.programs.system.SystemApp; -import com.ultreon.devices.programs.system.component.AppGrid; -import com.ultreon.devices.util.Vulnerability; -import net.fabricmc.loader.api.Version; -import net.minecraft.ChatFormatting; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.*; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.ItemList; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.util.Vulnerability; +import dev.ultreon.devices.api.utils.RenderUtil; import net.minecraft.Util; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; @@ -52,7 +41,7 @@ private Layout createMenu() { this.mainMenu = new Layout(250, 105); ItemList itemListResults = new ItemList<>(5, 5, AppStore.LAYOUT_WIDTH - 10, 5, true); - itemListResults.setItems(Devices.getVulnerabilities()); + itemListResults.setItems(UltreonDevicesMod.getVulnerabilities()); itemListResults.sortBy(Comparator.comparing(vulnerability -> -vulnerability.effectiveSeverity())); itemListResults.setListItemRenderer(new ListItemRenderer<>(18) { @Override @@ -103,9 +92,7 @@ private IIcon getIconFor(Vulnerability app) { private Layout createMenuFromVulnerability(Vulnerability vulnerability) { var layout = new Layout(250, 105); var behindTheNews = new Button(5, 5, Icons.ARROW_LEFT); - behindTheNews.setClickListener((__, ___, ____) -> { - setCurrentLayout(mainMenu); - }); + behindTheNews.setClickListener((__, ___, ____) -> setCurrentLayout(mainMenu)); layout.addComponent(behindTheNews); layout.addComponent(Util.make(new Label(vulnerability.title(), 5, 5 + behindTheNews.getHeight()+2), t -> t.setScale(1.25))); layout.addComponent(new Label(vulnerability.reporter() == null ? "Unknown" : vulnerability.reporter(), 5, 18 + behindTheNews.getHeight()+2)); @@ -121,7 +108,7 @@ private String re(Collection d, boolean e) { // VersionInterval prev = VersionInterval; ArrayList l = new ArrayList<>(); for (VersionPredicate versionPredicate : d) { - if ( versionPredicate instanceof VersionPredicateParser.SingleVersionPredicate p && Objects.equals(p.getInterval().getMin(), p.getInterval().getMax())) { + if ( versionPredicate instanceof VersionPredicateParser.SingleVersionPredicate p && Objects.equals(p.getInterval().min(), p.getInterval().max())) { l.add(p.getRefVersion().getFriendlyString()); } else l.add(versionPredicate.getInterval().toString()); diff --git a/common/src/main/java/com/ultreon/devices/programs/system/component/AppGrid.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/AppGrid.java similarity index 77% rename from common/src/main/java/com/ultreon/devices/programs/system/component/AppGrid.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/AppGrid.java index df2b7b94c..8b15d6026 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/component/AppGrid.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/AppGrid.java @@ -1,22 +1,20 @@ -package com.ultreon.devices.programs.system.component; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Image; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.system.AppStore; -import com.ultreon.devices.programs.system.object.AppEntry; -import com.ultreon.devices.programs.system.object.LocalEntry; -import com.ultreon.devices.programs.system.object.RemoteEntry; -import com.ultreon.devices.util.GuiHelper; +package dev.ultreon.devices.mineos.apps.system.component; + +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.system.AppStore; +import dev.ultreon.devices.mineos.apps.system.object.AppEntry; +import dev.ultreon.devices.mineos.apps.system.object.LocalEntry; +import dev.ultreon.devices.mineos.apps.system.object.RemoteEntry; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; @@ -65,14 +63,14 @@ protected void init(Layout layout) { } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { int size = Math.min(entries.size(), verticalItems * horizontalItems); for (int i = 0; i < size; i++) { int itemX = x + (i % horizontalItems) * (itemWidth + padding) + padding; int itemY = y + (i / horizontalItems) * (itemHeight + padding) + padding; if (GuiHelper.isMouseWithin(mouseX, mouseY, itemX, itemY, itemWidth, itemHeight)) { graphics.fill(itemX, itemY, itemX + itemWidth, itemY + itemHeight, Color.GRAY.getRGB()); - graphics.fill(itemX + 1, itemY + 1, itemX + itemWidth - 1, itemY + itemHeight - 1, Laptop.getSystem().getSettings().getColorScheme().getItemBackgroundColor()); + graphics.fill(itemX + 1, itemY + 1, itemX + itemWidth - 1, itemY + itemHeight - 1, MineOS.getOpened().getSettings().getColorScheme().getItemBackgroundColor()); } } } @@ -121,11 +119,11 @@ private Layout generateAppTile(AppEntry entry, int left, int top) { int iconOffset = (itemWidth - 14 * 3) / 2; if (entry instanceof LocalEntry localEntry) { Image.AppImage appImage = new Image.AppImage(iconOffset, padding, 14*3, 14*3, localEntry.info()); - // com.ultreon.devices.api.app.component.Image image = new com.ultreon.devices.api.app.component.Image(iconOffset, padding, 14 * 3, 14 * 3, localEntry.info().getIconU(), localEntry.info().getIconV(), 14, 14, 224, 224, Laptop.ICON_TEXTURES); + // dev.ultreon.devices.api.app.component.Image image = new dev.ultreon.devices.api.app.component.Image(iconOffset, padding, 14 * 3, 14 * 3, localEntry.info().getIconU(), localEntry.info().getIconV(), 14, 14, 224, 224, MineOS.ICON_TEXTURES); layout.addComponent(appImage); } else if (entry instanceof RemoteEntry remoteEntry) { ResourceLocation resource = new ResourceLocation(remoteEntry.id); - com.ultreon.devices.api.app.component.Image image = new com.ultreon.devices.api.app.component.Image(iconOffset, padding, 14 * 3, 14 * 3, AppStore.CERTIFICATES_BASE_URL + "/assets/" + resource.getNamespace() + "/" + resource.getPath() + "/icon.png"); + dev.ultreon.devices.api.app.component.Image image = new dev.ultreon.devices.api.app.component.Image(iconOffset, padding, 14 * 3, 14 * 3, AppStore.CERTIFICATES_BASE_URL + "/assets/" + resource.getNamespace() + "/" + resource.getPath() + "/icon.png"); layout.addComponent(image); } @@ -141,14 +139,14 @@ private Layout generateAppTile(AppEntry entry, int left, int top) { layout.addComponent(labelAuthor); if (store.certifiedApps.contains(entry)) { - com.ultreon.devices.api.app.component.Image certifiedIcon = new com.ultreon.devices.api.app.component.Image(15, 38, Icons.VERIFIED); + dev.ultreon.devices.api.app.component.Image certifiedIcon = new dev.ultreon.devices.api.app.component.Image(15, 38, Icons.VERIFIED); layout.addComponent(certifiedIcon); } if (entry instanceof LocalEntry) { AppInfo info = ((LocalEntry) entry).info(); - if (Laptop.getSystem().getInstalledApplications().contains(info)) { - com.ultreon.devices.api.app.component.Image installedIcon = new com.ultreon.devices.api.app.component.Image(itemWidth - 10 - 15, 38, Icons.CHECK); + if (MineOS.getOpened().getInstalledApplications().contains(info)) { + dev.ultreon.devices.api.app.component.Image installedIcon = new dev.ultreon.devices.api.app.component.Image(itemWidth - 10 - 15, 38, Icons.CHECK); layout.addComponent(installedIcon); } } @@ -165,8 +163,8 @@ private void reloadIcons(Layout layout) { layout.components.forEach(component -> { if (component instanceof Layout) { reloadIcons((Layout) component); - } else if (component instanceof com.ultreon.devices.api.app.component.Image) { - ((com.ultreon.devices.api.app.component.Image) component).reload(); + } else if (component instanceof dev.ultreon.devices.api.app.component.Image) { + ((dev.ultreon.devices.api.app.component.Image) component).reload(); } }); } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/component/FileBrowser.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/FileBrowser.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/programs/system/component/FileBrowser.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/FileBrowser.java index 8c872dd31..5cc08c83f 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/component/FileBrowser.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/FileBrowser.java @@ -1,32 +1,32 @@ -package com.ultreon.devices.programs.system.component; +package dev.ultreon.devices.mineos.apps.system.component; import com.mojang.blaze3d.systems.RenderSystem; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.component.*; -import com.ultreon.devices.api.app.listener.ItemClickListener; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.io.Drive; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.api.io.Folder; -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.core.Window; -import com.ultreon.devices.core.Wrappable; -import com.ultreon.devices.core.io.FileSystem; -import com.ultreon.devices.core.io.task.TaskGetFiles; -import com.ultreon.devices.core.io.task.TaskGetStructure; -import com.ultreon.devices.core.io.task.TaskSetupFileBrowser; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.system.SystemApp; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.*; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.component.*; +import dev.ultreon.devices.api.app.listener.ItemClickListener; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.io.Folder; +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.mineos.client.Window; +import dev.ultreon.devices.core.Wrappable; +import dev.ultreon.devices.core.io.FileSystem; +import dev.ultreon.devices.core.io.task.TaskGetFiles; +import dev.ultreon.devices.core.io.task.TaskGetStructure; +import dev.ultreon.devices.core.io.task.TaskSetupFileBrowser; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.mineos.apps.system.SystemApp; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -52,15 +52,12 @@ public class FileBrowser extends Component { private static final ResourceLocation ASSETS = new ResourceLocation("devices:textures/gui/file_browser.png"); - private static final Color HEADER_BACKGROUND = Color.decode("0x535861"); - private static final Color ITEM_BACKGROUND = Color.decode("0x9E9E9E"); - private static final Color ITEM_SELECTED = Color.decode("0x757575"); private static final Color PROTECTED_FILE = new Color(155, 237, 242); private static final ListItemRenderer ITEM_RENDERER = new ListItemRenderer<>(18) { @Override public void render(GuiGraphics graphics, File file, Minecraft mc, int x, int y, int width, int height, boolean selected) { - Color bgColor = new Color(Laptop.getSystem().getSettings().getColorScheme().getBackgroundColor()); + Color bgColor = new Color(MineOS.getOpened().getSettings().getColorScheme().getBackgroundColor()); graphics.fill(x, y, x + width, y + height, selected ? bgColor.brighter().brighter().getRGB() : bgColor.brighter().getRGB()); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); @@ -72,7 +69,7 @@ public void render(GuiGraphics graphics, File file, Minecraft mc, int x, int y, AppInfo info = ApplicationManager.getApplication(ResourceLocation.tryParse(file.getOpeningApp())); RenderUtil.drawApplicationIcon(graphics, info, x + 3, y + 2); } - graphics.drawString(Minecraft.getInstance().font, file.getName(), x + 22, y + 5, file.isProtected() ? PROTECTED_FILE.getRGB() : Laptop.getSystem().getSettings().getColorScheme().getTextColor()); + graphics.drawString(Minecraft.getInstance().font, file.getName(), x + 22, y + 5, file.isProtected() ? PROTECTED_FILE.getRGB() : MineOS.getOpened().getSettings().getColorScheme().getTextColor()); } }; @@ -137,7 +134,7 @@ public FileBrowser(int left, int top, Wrappable wrappable, Mode mode) { public void init(Layout layout) { layoutMain = new Layout(mode.getWidth(), mode.getHeight()); layoutMain.setBackground((graphics, mc, x, y, width, height, mouseX, mouseY, windowActive) -> { - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getHeaderColor()); + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getHeaderColor()); graphics.fill(x, y, x + width, y + 20, color.getRGB()); graphics.fill(x, y + 20, x + width, y + 21, color.darker().getRGB()); }); @@ -248,13 +245,13 @@ public void init(Layout layout) { } }); } else if (mode == Mode.FULL && wrappable instanceof SystemApp systemApp) { - Laptop laptop = systemApp.getLaptop(); + MineOS laptop = systemApp.getOS(); if (laptop != null) { //TODO change to check if application is installed Application targetApp = laptop.getApplication(file.getOpeningApp()); if (targetApp != null) { if (laptop.isApplicationInstalled(targetApp.getInfo())) { - if (!laptop.openApplication(targetApp.getInfo(), file).right()) { + if (!laptop.openApplication(targetApp.getInfo(), file).getSecond()) { laptop.sendApplicationToFront(systemApp.getInfo()); createErrorDialog(targetApp.getInfo().getName() + " was unable to open the file."); } @@ -314,22 +311,22 @@ public void render(GuiGraphics graphics, Drive drive, Minecraft mc, int x, int y public void handleLoad() { if (!loadedStructure) { setLoading(true); - Task task = new TaskSetupFileBrowser(Laptop.getPos(), Laptop.getMainDrive() == null); + Task task = new TaskSetupFileBrowser(MineOS.getOpened().getPos(), MineOS.getOpened().getMainDrive() == null); task.setCallback((tag, success) -> { if (success) { - if (Laptop.getMainDrive() == null) { + if (MineOS.getOpened().getMainDrive() == null) { assert tag != null; CompoundTag structureTag = tag.getCompound("structure"); Drive drive = new Drive(tag.getCompound("main_drive")); drive.syncRoot(Folder.fromTag(FileSystem.LAPTOP_DRIVE_NAME, structureTag)); drive.getRoot().validate(); - Laptop.setMainDrive(drive); + MineOS.getOpened().setMainDrive(drive); } assert tag != null; ListTag driveList = tag.getList("available_drives", Tag.TAG_COMPOUND); Drive[] drives = new Drive[driveList.size() + 1]; - drives[0] = currentDrive = Laptop.getMainDrive(); + drives[0] = currentDrive = MineOS.getOpened().getMainDrive(); for (int i = 0; i < driveList.size(); i++) { CompoundTag driveTag = driveList.getCompound(i); drives[i + 1] = new Drive(driveTag); @@ -386,7 +383,7 @@ private void openDrive(Drive drive) { }); } else { setLoading(true); - TaskGetStructure task = new TaskGetStructure(drive, Laptop.getPos()); + TaskGetStructure task = new TaskGetStructure(drive, MineOS.getOpened().getPos()); task.setCallback((tag, success) -> { setLoading(false); if (success) { @@ -409,7 +406,7 @@ private void openDrive(Drive drive) { private void openFolder(Folder folder, boolean push, Callback callback) { DebugLog.log("Opening Folder"); if (!folder.isSynced()) { - BlockPos pos = Laptop.getPos(); + BlockPos pos = MineOS.getOpened().getPos(); DebugLog.log("Open Folder: " + pos); if (pos == null) { if (callback != null) { @@ -471,7 +468,7 @@ private void pushPredecessors(Folder folder) { } Collections.reverse(predecessors); predecessors.forEach(predecessor::push); - if (predecessor.size() > 0) { + if (!predecessor.isEmpty()) { btnPreviousFolder.setEnabled(true); } } @@ -490,7 +487,7 @@ private void createFolder() { } private void goToPreviousFolder() { - if (predecessor.size() > 0) { + if (!predecessor.isEmpty()) { setLoading(true); Folder folder = predecessor.pop(); openFolder(folder, false, (folder2, success) -> { @@ -725,7 +722,7 @@ private boolean canPasteHere() { } private boolean isRootFolder() { - return predecessor.size() == 0; + return predecessor.isEmpty(); } private void updatePath() { diff --git a/common/src/main/java/com/ultreon/devices/programs/system/component/Palette.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/Palette.java similarity index 86% rename from common/src/main/java/com/ultreon/devices/programs/system/component/Palette.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/Palette.java index dc20e3124..29d1bbe18 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/component/Palette.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/Palette.java @@ -1,20 +1,21 @@ -package com.ultreon.devices.programs.system.component; +package dev.ultreon.devices.mineos.apps.system.component; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.*; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.ComboBox; -import com.ultreon.devices.api.app.component.Slider; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GLHelper; -import com.ultreon.devices.util.GuiHelper; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexFormat; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.ComboBox; +import dev.ultreon.devices.api.app.component.Slider; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GLHelper; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.GameRenderer; import java.awt.*; @@ -65,7 +66,7 @@ protected void init(Layout layout) { } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { graphics.fill(x, y, x + 52, y + 52, Color.DARK_GRAY.getRGB()); // Todo: Disable lighting somehow. diff --git a/common/src/main/java/com/ultreon/devices/programs/system/component/SlideShow.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/SlideShow.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/programs/system/component/SlideShow.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/SlideShow.java index 752204a87..c45f49269 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/component/SlideShow.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/component/SlideShow.java @@ -1,27 +1,27 @@ -package com.ultreon.devices.programs.system.component; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Image; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.programs.system.object.ImageEntry; -import com.ultreon.devices.util.GuiHelper; +package dev.ultreon.devices.mineos.apps.system.component; + +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.mineos.apps.system.object.ImageEntry; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; +import java.awt.Color; + /** * @author MrCrayfish */ @SuppressWarnings("unused") public class SlideShow extends Component { - private static final java.awt.Color OVERLAY = new java.awt.Color(0f, 0f, 0f, 0.15f); - private static final java.awt.Color OVERLAY_HOVER = new java.awt.Color(0.35f, 0.35f, 0.35f, 0.15f); + private static final Color OVERLAY = new Color(0f, 0f, 0f, 0.15f); + private static final Color OVERLAY_HOVER = new Color(0.35f, 0.35f, 0.35f, 0.15f); private final int width; private final int height; @@ -60,7 +60,7 @@ protected void handleLoad() { } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { if (!this.visible) return; image.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); diff --git a/common/src/main/java/com/ultreon/devices/programs/system/layout/LayoutAppPage.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/LayoutAppPage.java similarity index 77% rename from common/src/main/java/com/ultreon/devices/programs/system/layout/LayoutAppPage.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/LayoutAppPage.java index 1c91355cd..f66a2e574 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/layout/LayoutAppPage.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/LayoutAppPage.java @@ -1,27 +1,25 @@ -package com.ultreon.devices.programs.system.layout; +package dev.ultreon.devices.mineos.apps.system.layout; import com.google.common.collect.Lists; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.ScrollableLayout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Image; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; -import com.ultreon.devices.programs.system.AppStore; -import com.ultreon.devices.programs.system.component.SlideShow; -import com.ultreon.devices.programs.system.object.AppEntry; -import com.ultreon.devices.programs.system.object.LocalEntry; -import com.ultreon.devices.programs.system.object.RemoteEntry; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.ScrollableLayout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; +import dev.ultreon.devices.mineos.apps.system.AppStore; +import dev.ultreon.devices.mineos.apps.system.component.SlideShow; +import dev.ultreon.devices.mineos.apps.system.object.AppEntry; +import dev.ultreon.devices.mineos.apps.system.object.LocalEntry; +import dev.ultreon.devices.mineos.apps.system.object.RemoteEntry; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.ChatFormatting; import net.minecraft.Util; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -32,18 +30,18 @@ * @author MrCrayfish */ public class LayoutAppPage extends Layout { - private final Laptop laptop; + private final MineOS laptop; private final AppEntry entry; private final AppStore store; - private com.ultreon.devices.api.app.component.Image imageBanner; - private com.ultreon.devices.api.app.Component imageIcon; + private dev.ultreon.devices.api.app.component.Image imageBanner; + private dev.ultreon.devices.api.app.Component imageIcon; private Label labelTitle; private Label labelVersion; private boolean installed; - public LayoutAppPage(Laptop laptop, AppEntry entry, AppStore store) { + public LayoutAppPage(MineOS laptop, AppEntry entry, AppStore store) { super(250, 150); this.laptop = laptop; this.entry = entry; @@ -53,12 +51,12 @@ public LayoutAppPage(Laptop laptop, AppEntry entry, AppStore store) { @Override public void init() { if (entry instanceof LocalEntry) { - installed = Laptop.getSystem().getInstalledApplications().contains(((LocalEntry) entry).info()); + installed = MineOS.getOpened().getInstalledApplications().contains(((LocalEntry) entry).info()); } this.setBackground((graphics, mc, x, y, width, height, mouseX, mouseY, windowActive) -> { - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getBackgroundColor()); + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getBackgroundColor()); graphics.fill(x, y + 40, x + width, y + 41, color.brighter().getRGB()); graphics.fill(x, y + 41, x + width, y + 60, color.getRGB()); graphics.fill(x, y + 60, x + width, y + 61, color.darker().getRGB()); @@ -66,7 +64,7 @@ public void init() { ResourceLocation resource = new ResourceLocation(entry.id()); - imageBanner = new com.ultreon.devices.api.app.component.Image(0, 0, 250, 40); + imageBanner = new dev.ultreon.devices.api.app.component.Image(0, 0, 250, 40); imageBanner.setDrawFull(true); imageBanner.setBorderVisible(true); imageBanner.setBorderThickness(0); @@ -81,15 +79,15 @@ public void init() { LocalEntry localEntry = (LocalEntry) entry; AppInfo info = localEntry.info(); imageIcon = new Image.AppImage(5, 26, 28, 28, info); - // imageIcon = new com.ultreon.devices.api.app.component.Image(5, 26, 28, 28, info.getIconU(), info.getIconV(), 14, 14, 224, 224, Laptop.ICON_TEXTURES); + // imageIcon = new dev.ultreon.devices.api.app.component.Image(5, 26, 28, 28, info.getIconU(), info.getIconV(), 14, 14, 224, 224, MineOS.ICON_TEXTURES); } else if (entry instanceof RemoteEntry) { - imageIcon = new com.ultreon.devices.api.app.component.Image(5, 26, 28, 28, AppStore.CERTIFICATES_BASE_URL + "/assets/" + resource.getNamespace() + "/" + resource.getPath() + "/icon.png"); + imageIcon = new dev.ultreon.devices.api.app.component.Image(5, 26, 28, 28, AppStore.CERTIFICATES_BASE_URL + "/assets/" + resource.getNamespace() + "/" + resource.getPath() + "/icon.png"); } this.addComponent(imageIcon); if (store.certifiedApps.contains(entry)) { - int width = Laptop.getFont().width(entry.name()) * 2; - com.ultreon.devices.api.app.component.Image certifiedIcon = new com.ultreon.devices.api.app.component.Image(38 + width + 3, 29, 20, 20, Icons.VERIFIED); + int width = MineOS.getFont().width(entry.name()) * 2; + dev.ultreon.devices.api.app.component.Image certifiedIcon = new dev.ultreon.devices.api.app.component.Image(38 + width + 3, 29, 20, 20, Icons.VERIFIED); this.addComponent(certifiedIcon); } labelTitle = new Label(entry.name(), 38, 32); @@ -167,12 +165,12 @@ public void init() { } @Override - public void renderOverlay(GuiGraphics graphics, Laptop laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { + public void renderOverlay(GuiGraphics graphics, MineOS laptop, Minecraft mc, int mouseX, int mouseY, boolean windowActive) { super.renderOverlay(graphics, laptop, mc, mouseX, mouseY, windowActive); if (store.certifiedApps.contains(entry)) { - int width = Laptop.getFont().width(entry.name()) * 2; + int width = MineOS.getFont().width(entry.name()) * 2; if (GuiHelper.isMouseWithin(mouseX, mouseY, xPosition + 38 + width + 3, yPosition + 29, 20, 20)) { - laptop.renderComponentTooltip(graphics, Lists.newArrayList(Component.literal("Certified App").withStyle(ChatFormatting.GREEN)), mouseX, mouseY); + graphics.renderComponentTooltip(MineOS.getFont(), Lists.newArrayList(Component.literal("Certified App").withStyle(ChatFormatting.GREEN)), mouseX, mouseY); } } } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/layout/LayoutSearchApps.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/LayoutSearchApps.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/programs/system/layout/LayoutSearchApps.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/LayoutSearchApps.java index 2cba9189f..9f7a4d83a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/layout/LayoutSearchApps.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/LayoutSearchApps.java @@ -1,21 +1,19 @@ -package com.ultreon.devices.programs.system.layout; +package dev.ultreon.devices.mineos.apps.system.layout; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.ItemList; -import com.ultreon.devices.api.app.component.TextField; -import com.ultreon.devices.api.app.renderer.ListItemRenderer; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.system.AppStore; -import com.ultreon.devices.programs.system.object.LocalEntry; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.ItemList; +import dev.ultreon.devices.api.app.component.TextField; +import dev.ultreon.devices.api.app.renderer.ListItemRenderer; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.apps.system.AppStore; +import dev.ultreon.devices.mineos.apps.system.object.LocalEntry; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import org.apache.commons.lang3.StringUtils; @@ -80,7 +78,7 @@ public void render(GuiGraphics graphics, AppInfo info, Minecraft mc, int x, int } private void openApplication(AppInfo info) { - Layout layout = new LayoutAppPage(appStore.getLaptop(), new LocalEntry(info), appStore); + Layout layout = new LayoutAppPage(appStore.getOS(), new LocalEntry(info), appStore); app.setCurrentLayout(layout); Button btnPrevious = new Button(2, 2, Icons.ARROW_LEFT); btnPrevious.setClickListener((mouseX1, mouseY1, mouseButton1) -> app.setCurrentLayout(this)); diff --git a/common/src/main/java/com/ultreon/devices/programs/system/layout/StandardLayout.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/StandardLayout.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/programs/system/layout/StandardLayout.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/StandardLayout.java index fd29b090e..e30748e5a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/layout/StandardLayout.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/layout/StandardLayout.java @@ -1,17 +1,15 @@ -package com.ultreon.devices.programs.system.layout; +package dev.ultreon.devices.mineos.apps.system.layout; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.IIcon; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.core.Laptop; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.IIcon; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; - import net.minecraft.client.gui.GuiGraphics; import org.jetbrains.annotations.Nullable; + import java.awt.*; /** @@ -45,8 +43,8 @@ public void init() { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getHeaderColor()); + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getHeaderColor()); graphics.fill(x, y, x + width, y + 20, color.getRGB()); graphics.fill(x, y + 20, x + width, y + 21, color.darker().getRGB()); diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/Account.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/Account.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/programs/system/object/Account.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/Account.java index e7022caa1..3aaa5f580 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/Account.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/Account.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.system.object; +package dev.ultreon.devices.mineos.apps.system.object; public class Account { private int balance; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/AppEntry.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/AppEntry.java similarity index 86% rename from common/src/main/java/com/ultreon/devices/programs/system/object/AppEntry.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/AppEntry.java index 0b28ce4a0..6ec6b3a35 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/AppEntry.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/AppEntry.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.system.object; - -import com.ultreon.devices.object.AppInfo; +package dev.ultreon.devices.mineos.apps.system.object; +import dev.ultreon.devices.object.AppInfo; import org.jetbrains.annotations.Nullable; + import java.util.Arrays; /** diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/ColorScheme.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorScheme.java similarity index 99% rename from common/src/main/java/com/ultreon/devices/programs/system/object/ColorScheme.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorScheme.java index 8b371a059..9052611f1 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/ColorScheme.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorScheme.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.system.object; +package dev.ultreon.devices.mineos.apps.system.object; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/ColorSchemePresetRegistry.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorSchemePresetRegistry.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/programs/system/object/ColorSchemePresetRegistry.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorSchemePresetRegistry.java index 9e59901c4..306ac3dcf 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/ColorSchemePresetRegistry.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorSchemePresetRegistry.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.system.object; +package dev.ultreon.devices.mineos.apps.system.object; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/ColorSchemePresets.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorSchemePresets.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/programs/system/object/ColorSchemePresets.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorSchemePresets.java index d02752ea7..639f3831f 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/ColorSchemePresets.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ColorSchemePresets.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.programs.system.object; +package dev.ultreon.devices.mineos.apps.system.object; -import com.ultreon.devices.Devices; +import dev.ultreon.devices.UltreonDevicesMod; import net.minecraft.resources.ResourceLocation; import java.util.function.Consumer; @@ -36,7 +36,7 @@ public class ColorSchemePresets { private static Preset createPreset(String name, ColorScheme colorScheme, Consumer consumer) { consumer.accept(colorScheme); - ResourceLocation id = Devices.id(name); + ResourceLocation id = UltreonDevicesMod.id(name); Preset preset = new Preset(colorScheme, id); ColorSchemePresetRegistry.register(id, preset); diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/ImageEntry.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ImageEntry.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/programs/system/object/ImageEntry.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ImageEntry.java index e934f1f87..155963360 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/ImageEntry.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/ImageEntry.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.system.object; +package dev.ultreon.devices.mineos.apps.system.object; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/LocalEntry.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/LocalEntry.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/programs/system/object/LocalEntry.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/LocalEntry.java index ad366ca24..b129d8f19 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/LocalEntry.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/LocalEntry.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.programs.system.object; +package dev.ultreon.devices.mineos.apps.system.object; -import com.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.AppInfo; /** * @author MrCrayfish diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/Preset.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/Preset.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/programs/system/object/Preset.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/Preset.java index 025732ca9..042123d52 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/Preset.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/Preset.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.programs.system.object; +package dev.ultreon.devices.mineos.apps.system.object; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/object/RemoteEntry.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/RemoteEntry.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/programs/system/object/RemoteEntry.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/RemoteEntry.java index a7d950763..8add91d4e 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/object/RemoteEntry.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/object/RemoteEntry.java @@ -1,7 +1,6 @@ -package com.ultreon.devices.programs.system.object; - -import com.ultreon.devices.object.AppInfo; +package dev.ultreon.devices.mineos.apps.system.object; +import dev.ultreon.devices.object.AppInfo; import org.jetbrains.annotations.Nullable; /** diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskAdd.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskAdd.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskAdd.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskAdd.java index 33d941e2c..3378cfb9d 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskAdd.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskAdd.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.programs.system.object.Account; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.mineos.apps.system.object.Account; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskDeposit.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskDeposit.java similarity index 83% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskDeposit.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskDeposit.java index 8dd9e9f8b..ba3ccee20 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskDeposit.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskDeposit.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.programs.system.object.Account; -import com.ultreon.devices.util.InventoryUtil; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.mineos.apps.system.object.Account; +import dev.ultreon.devices.util.InventoryUtil; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Items; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskGetBalance.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskGetBalance.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskGetBalance.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskGetBalance.java index 24faffd91..98c71f665 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskGetBalance.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskGetBalance.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.programs.system.object.Account; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.mineos.apps.system.object.Account; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskPay.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskPay.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskPay.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskPay.java index a3ded6336..9a9449780 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskPay.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskPay.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.programs.system.object.Account; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.mineos.apps.system.object.Account; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -45,7 +45,7 @@ public void processRequest(CompoundTag tag, Level level, Player player) { @Override public void prepareResponse(CompoundTag tag) { - if (isSucessful()) { + if (isSuccessful()) { tag.putInt("balance", this.amount); } } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskRemove.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskRemove.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskRemove.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskRemove.java index a6de02e53..0ad4c1ac8 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskRemove.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskRemove.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.programs.system.object.Account; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.mineos.apps.system.object.Account; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -36,7 +36,7 @@ public void processRequest(CompoundTag tag, Level level, Player player) { @Override public void prepareResponse(CompoundTag tag) { - if (isSucessful()) { + if (isSuccessful()) { tag.putInt("balance", this.amount); } } diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskUpdateApplicationData.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskUpdateApplicationData.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskUpdateApplicationData.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskUpdateApplicationData.java index 671b52a9c..72bd909e5 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskUpdateApplicationData.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskUpdateApplicationData.java @@ -1,13 +1,12 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; - import org.jetbrains.annotations.NotNull; public class TaskUpdateApplicationData extends Task { diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskUpdateSystemData.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskUpdateSystemData.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskUpdateSystemData.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskUpdateSystemData.java index 8296ece08..842d0978e 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskUpdateSystemData.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskUpdateSystemData.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskWithdraw.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskWithdraw.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/programs/system/task/TaskWithdraw.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskWithdraw.java index 2f377eb14..cfb94ed3a 100644 --- a/common/src/main/java/com/ultreon/devices/programs/system/task/TaskWithdraw.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/system/task/TaskWithdraw.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.programs.system.task; +package dev.ultreon.devices.mineos.apps.system.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.utils.BankUtil; -import com.ultreon.devices.programs.system.object.Account; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.utils.BankUtil; +import dev.ultreon.devices.mineos.apps.system.object.Account; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/programs/themes/ThemesApp.java b/common/src/main/java/dev/ultreon/devices/mineos/apps/themes/ThemesApp.java similarity index 81% rename from common/src/main/java/com/ultreon/devices/programs/themes/ThemesApp.java rename to common/src/main/java/dev/ultreon/devices/mineos/apps/themes/ThemesApp.java index 022e63ec0..ca24e0aa5 100644 --- a/common/src/main/java/com/ultreon/devices/programs/themes/ThemesApp.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/apps/themes/ThemesApp.java @@ -1,29 +1,26 @@ -package com.ultreon.devices.programs.themes; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.System; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.TextField; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.AppInfo; +package dev.ultreon.devices.mineos.apps.themes; + +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.*; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.TextField; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.MineOSSystem; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; -import org.apache.commons.codec.binary.Hex; import org.jetbrains.annotations.Nullable; import java.awt.*; import java.math.BigInteger; import java.util.Arrays; -import java.util.HexFormat; public class ThemesApp extends Application implements SystemAccessor { - private System system; + private MineOSSystem system; private int[] lastMousePositionsX = null; private int[] lastMousePositionsY = null; @@ -45,12 +42,12 @@ public void save(CompoundTag tag) { } @Override - public void sendSystem(System system) { + public void sendSystem(MineOSSystem system) { this.system = system; } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, active, partialTicks); } @@ -109,9 +106,7 @@ private Layout createMainMenu() { private Button createTintButton() { var button = new Button(marginX, marginY + 16 + paddingY, "Tints"); - button.setClickListener((mouseX, mouseY, btn) -> { - setCurrentLayout(createTintMenu()); - }); + button.setClickListener((mouseX, mouseY, btn) -> setCurrentLayout(createTintMenu())); return button; } @@ -207,7 +202,7 @@ protected void init(Layout layout) { this.info.setTintProvider(new ThemeTintProvider(l, ll)); resetButton.setEnabled(true); } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("Failed to set tint", e); openDialog(new Dialog.Message("Failed to set tint")); } // okButton.setEnabled(); @@ -238,12 +233,11 @@ protected void init(Layout layout) { } private String toColorHex(int b) { - String hexColor = String.format("#%06X", (0xFFFFFF & b)); - return hexColor; + return String.format("#%06X", (0xFFFFFF & b)); } @Override - protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + protected void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { super.render(graphics, laptop, mc, x, y, mouseX, mouseY, windowActive, partialTicks); graphics.pose().pushPose(); RenderUtil.drawIcon(graphics, x, y, info, height, height); // height is intended @@ -251,34 +245,23 @@ protected void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, } } - private static void createCTP() { - - } - - private static class ThemeTintProvider implements AppInfo.TintProvider { - private final Color l; - private final Color ll; - ThemeTintProvider(Color l, Color ll) { - this.l = l; - this.ll = ll; - } + private record ThemeTintProvider(Color l, Color ll) implements AppInfo.TintProvider { @Override - public int getTintColor(AppInfo info, int i) { - return switch (i) { - case 0 -> new Color(255, 255, 255).getRGB(); - case 1 -> l.getRGB(); - case 2 -> ll.getRGB(); - default -> new Color(255, 255, 255).getRGB(); - }; - } + public int getTintColor(AppInfo info, int i) { + return switch (i) { + case 1 -> l.getRGB(); + case 2 -> ll.getRGB(); + default -> new Color(255, 255, 255).getRGB(); + }; + } - @Override - public CompoundTag toTag() { - var l = new CompoundTag(); - l.putInt("0", getTintColor(null, 0)); - l.putInt("1", getTintColor(null, 1)); - l.putInt("2", getTintColor(null, 2)); - return l; + @Override + public CompoundTag toTag() { + var l = new CompoundTag(); + l.putInt("0", getTintColor(null, 0)); + l.putInt("1", getTintColor(null, 1)); + l.putInt("2", getTintColor(null, 2)); + return l; + } } - } } diff --git a/common/src/main/java/com/ultreon/devices/core/Laptop.java b/common/src/main/java/dev/ultreon/devices/mineos/client/MineOS.java similarity index 70% rename from common/src/main/java/com/ultreon/devices/core/Laptop.java rename to common/src/main/java/dev/ultreon/devices/mineos/client/MineOS.java index d2d170356..0b7a851c7 100644 --- a/common/src/main/java/com/ultreon/devices/core/Laptop.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/client/MineOS.java @@ -1,208 +1,178 @@ -package com.ultreon.devices.core; +package dev.ultreon.devices.mineos.client; import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.api.app.System; -import com.ultreon.devices.api.app.*; -import com.ultreon.devices.api.app.component.Image; -import com.ultreon.devices.api.io.Drive; -import com.ultreon.devices.api.io.File; -import com.ultreon.devices.api.task.Callback; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.api.utils.OnlineRequest; -import com.ultreon.devices.api.video.CustomResolution; -import com.ultreon.devices.api.video.VideoInfo; -import com.ultreon.devices.block.entity.ComputerBlockEntity; -import com.ultreon.devices.core.task.TaskInstallApp; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.system.DiagnosticsApp; -import com.ultreon.devices.programs.system.DisplayResolution; -import com.ultreon.devices.programs.system.PredefinedResolution; -import com.ultreon.devices.programs.system.SystemApp; -import com.ultreon.devices.programs.system.component.FileBrowser; -import com.ultreon.devices.programs.system.task.TaskUpdateApplicationData; -import com.ultreon.devices.programs.system.task.TaskUpdateSystemData; -import com.ultreon.devices.util.GLHelper; +import com.mojang.datafixers.util.Pair; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Image; +import dev.ultreon.devices.api.io.Drive; +import dev.ultreon.devices.api.task.Callback; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.api.video.VideoInfo; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.client.Display; +import dev.ultreon.devices.core.task.TaskInstallApp; +import dev.ultreon.devices.api.bios.InterruptData; +import dev.ultreon.devices.api.util.Color; +import dev.ultreon.devices.mineos.MineOSSystem; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.mineos.apps.system.DiagnosticsApp; +import dev.ultreon.devices.mineos.apps.system.DisplayResolution; +import dev.ultreon.devices.mineos.apps.system.PredefinedResolution; +import dev.ultreon.devices.mineos.apps.system.SystemApp; +import dev.ultreon.devices.mineos.apps.system.component.FileBrowser; +import dev.ultreon.devices.mineos.apps.system.task.TaskUpdateApplicationData; +import dev.ultreon.devices.mineos.apps.system.task.TaskUpdateSystemData; +import dev.ultreon.devices.util.FrameBuffer; +import dev.ultreon.devices.util.GLHelper; import dev.architectury.injectables.annotations.PlatformOnly; import dev.architectury.platform.Mod; -import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.IntArraySet; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.api.app.SystemAccessor; +import dev.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.utils.OnlineRequest; +import dev.ultreon.devices.api.video.CustomResolution; import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.StringTag; -import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.Style; import net.minecraft.resources.ResourceLocation; +import net.minecraft.client.gui.GuiGraphics; +import dev.ultreon.devices.api.os.OperatingSystem; +import dev.ultreon.devices.api.os.ShutdownSource; +import net.minecraft.nbt.StringTag; +import net.minecraft.nbt.Tag; import net.minecraft.sounds.SoundEvents; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.awt.*; import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import java.util.ArrayList; +import java.util.*; import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; //TODO Intro message (created by mrcrayfish, donate here) /** - * Laptop GUI class. + * MineOS GUI class. * - * @author MrCrayfish, Qboi123 + * @author MrCrayfish, XyperCode */ -public class Laptop extends Screen implements System { +public class MineOS extends Screen implements OperatingSystem, MineOSSystem { public static final int ID = 1; - public static final ResourceLocation ICON_TEXTURES = new ResourceLocation(Devices.MOD_ID, "textures/atlas/app_icons.png"); + public static final ResourceLocation ICON_TEXTURES = UltreonDevicesMod.res("textures/atlas/app_icons.png"); public static final int ICON_SIZE = 14; - private static final ResourceLocation LAPTOP_FONT = Devices.res("laptop"); - private static Font font; - private static final ResourceLocation LAPTOP_GUI = new ResourceLocation(Devices.MOD_ID, "textures/gui/laptop.png"); private static final List APPLICATIONS = new ArrayList<>(); - private static boolean worldLess; - private static Laptop instance; + private static final List WALLPAPERS = new ArrayList<>(); + private static final List tasks = new CopyOnWriteArrayList<>(); + private static final Map instances = new HashMap<>(); + private static Font font; + + private final MineOSKernel kernel = new MineOSKernel(); + private final boolean worldLess; + private final ComputerBlockEntity computer; + private final IntArraySet pressed = new IntArraySet(); + private final Bios bios; private Double dragWindowFromX; private Double dragWindowFromY; private VideoInfo videoInfo; - @PlatformOnly("fabric") - public static List getApplicationsForFabric() { - return APPLICATIONS; - } - - public static List getWallpapers() { - return ImmutableList.copyOf(WALLPAPERS); - } - - private static final List WALLPAPERS = new ArrayList<>(); - - private static final int BORDER = 10; - private static final List tasks = new CopyOnWriteArrayList<>(); - private static System system; - private static BlockPos pos; - private static Drive mainDrive; - private final Settings settings; - private final TaskBar bar; - final CopyOnWriteArrayList> windows; - private final CompoundTag appData; - private final CompoundTag systemData; + private MineOSSystem system; + private BlockPos pos; + private Drive mainDrive; + private Settings settings; + private TaskBar bar; + CopyOnWriteArrayList> windows; + ConcurrentHashMap> windowById = new ConcurrentHashMap<>(); + private CompoundTag appData; + private CompoundTag systemData; protected List installedApps = new ArrayList<>(); private Layout context = null; private Wallpaper currentWallpaper; - private int lastMouseX, lastMouseY; private boolean dragging = false; - private final IntArraySet pressed = new IntArraySet(); - private final Image wallpaper; - private final Layout wallpaperLayout; + private Image wallpaper; + private Layout wallpaperLayout; private BSOD bsod; - - public static Font getFont() { - if (font == null) { - font = Minecraft.getInstance().font; - } - return font; - } + private Display display; /** * Creates a new laptop GUI. - * - * @param laptop the block entity of the laptop in-game, if the laptop is not in-game, the level passed to it should be null. */ - public Laptop(ComputerBlockEntity laptop) { - this(laptop, false); + public MineOS(@Nullable ComputerBlockEntity computer, Bios bios) { + this(computer, bios, computer == null); } /** * Creates a new laptop GUI. - * - * @param laptop the block entity of the laptop in-game, if the laptop is not in-game, the level passed to it should be null. */ - public Laptop(ComputerBlockEntity laptop, boolean worldLess) { - super(Component.literal("Laptop")); - - instance = this; + public MineOS(@Nullable ComputerBlockEntity computer, Bios bios, boolean worldLess) { + super(Component.literal("MineOS")); + this.minecraft = Minecraft.getInstance(); - // Laptop data. - this.appData = laptop.getApplicationData(); - this.systemData = laptop.getSystemData(); + this.computer = computer; + this.bios = bios; + this.worldLess = worldLess; - CompoundTag videoInfoData = this.systemData.getCompound("videoInfo"); - this.videoInfo = new VideoInfo(videoInfoData); + this.boot(bios); - // Windows - this.windows = new CopyOnWriteArrayList<>() { - @Override - public Window get(int index) { - try { - return super.get(index); - } catch (Exception e) { - return null; - } - } - - @Override - public boolean add(Window window) { - window.removed = false; - return super.add(window); - } - }; + if (computer != null) { + MineOS.instances.put(bios.getDeviceId(), this); + } + } - // Settings etc. - this.settings = Settings.fromTag(systemData.getCompound("Settings")); + @PlatformOnly("fabric") + public static List getApplicationsForFabric() { + return APPLICATIONS; + } - // GUI Components - CompoundTag taskBarTag = systemData.getCompound("TaskBar"); - systemData.put("TaskBar", taskBarTag); - this.bar = new TaskBar(this, taskBarTag); + public static List getWallpapers() { + return ImmutableList.copyOf(WALLPAPERS); + } - // Wallpaper stuff - this.currentWallpaper = systemData.contains("CurrentWallpaper", 10) ? new Wallpaper(systemData.getCompound("CurrentWallpaper")) : null; - if (this.currentWallpaper == null) this.currentWallpaper = new Wallpaper(0); - Laptop.system = this; - Laptop.pos = laptop.getBlockPos(); - this.wallpaperLayout = new Layout(getScreenWidth(), getScreenHeight()); - this.wallpaper = new Image(0, 0, getScreenWidth(), getScreenHeight()); - if (currentWallpaper.isBuiltIn()) { - wallpaper.setImage(WALLPAPERS.get(currentWallpaper.location)); - } else { - wallpaper.setImage(currentWallpaper.url); + public static Font getFont() { + if (font == null) { + font = Minecraft.getInstance().font; } - this.wallpaperLayout.addComponent(this.wallpaper); - this.wallpaperLayout.handleLoad(); + return font; + } - // World-less flag. - Laptop.worldLess = worldLess; + public static MineOS get(UUID id) { + return instances.get(id); } - public static Laptop getInstance() { - return instance; + public static MineOS getOpened() { + OperatingSystem os = Display.get().getOS(); + if (os instanceof MineOS mineOS) { + return mineOS; + } + + throw new ClassCastException("Cannot cast " + os.getClass().getName() + " to " + MineOS.class.getName()); } - public static int getScreenWidth() { - return instance.videoInfo.getResolution().width(); + public int getScreenWidth() { + return videoInfo.getResolution().width(); } - public static int getScreenHeight() { - return instance.videoInfo.getResolution().height(); + public int getScreenHeight() { + return videoInfo.getResolution().height(); } - public static DisplayResolution getResolution() { - return instance.videoInfo.getResolution(); + public DisplayResolution getResolution() { + return videoInfo.getResolution(); } public CompoundTag getModSystemTag(Mod mod) { @@ -217,10 +187,16 @@ public CompoundTag getModSystemTag(String modId) { return mod; } - public static boolean isWorldLess() { + @Override + public boolean isWorldLess() { return worldLess; } + @Override + public Screen getScreen() { + return this; + } + /** * Returns the position of the laptop the player is currently using. This method can ONLY be * called when the laptop GUI is open, otherwise it will return a null position. @@ -228,7 +204,7 @@ public static boolean isWorldLess() { * @return the position of the laptop currently in use */ @Nullable - public static BlockPos getPos() { + public BlockPos getPos() { return pos; } @@ -243,18 +219,20 @@ public static void addWallpaper(ResourceLocation wallpaper) { } } - public static System getSystem() { + public MineOSSystem getSystem() { return system; } @Nullable - public static Drive getMainDrive() { - return mainDrive; + @Deprecated + public Drive getMainDrive() { + return bios.getMainDrive(); } - public static void setMainDrive(Drive mainDrive) { - if (Laptop.mainDrive == null) { - Laptop.mainDrive = mainDrive; + @Deprecated + public void setMainDrive(Drive mainDrive) { + if (this.mainDrive == null) { + this.mainDrive = mainDrive; } } @@ -268,13 +246,11 @@ public static void runLater(Runnable task) { } /** - * Initialize the Laptop GUI. + * Initialize the MineOS GUI. */ @Override - public void init() { - int posX = (width - getDeviceWidth()) / 2; - int posY = (height - getDeviceHeight()) / 2; - bar.init(posX + BORDER, posY + getDeviceHeight() - 28); + public void init(GuiGraphics graphics) { + bar.init(0, getScreenHeight() - bar.getHeight()); installedApps.clear(); ListTag list = systemData.getList("InstalledApps", Tag.TAG_STRING); @@ -285,17 +261,83 @@ public void init() { } } installedApps.sort(AppInfo.SORT_NAME); - if (Minecraft.getInstance().getConnection() == null) { + if (UltreonDevicesMod.get().isDebug()) { installedApps.addAll(ApplicationManager.getAvailableApplications()); } } - private static int getDeviceWidth() { - return getScreenWidth() + 2 * BORDER; + @Override + public void boot(Bios bios) { + // MineOS data. + this.appData = computer.getApplicationData(); + this.systemData = computer.getSystemData(); + + CompoundTag videoInfoData = this.systemData.getCompound("videoInfo"); + this.videoInfo = new VideoInfo(videoInfoData); + + // Windows + this.windows = new CopyOnWriteArrayList<>() { + @Override + public Window get(int index) { + try { + return super.get(index); + } catch (Exception e) { + return null; + } + } + + @Override + public boolean add(Window window) { + window.removed = false; + return super.add(window); + } + }; + + // Settings etc. + this.settings = Settings.fromTag(systemData.getCompound("Settings")); + + // GUI Components + CompoundTag taskBarTag = systemData.getCompound("TaskBar"); + systemData.put("TaskBar", taskBarTag); + this.bar = new TaskBar(this, taskBarTag); + + // Wallpaper stuff + this.currentWallpaper = systemData.contains("CurrentWallpaper", 10) ? new Wallpaper(systemData.getCompound("CurrentWallpaper")) : null; + if (this.currentWallpaper == null) this.currentWallpaper = new Wallpaper(0); + this.system = this; + this.pos = computer.getBlockPos(); + this.wallpaperLayout = new Layout(getScreenWidth(), getScreenHeight()); + this.wallpaper = new Image(0, 0, getScreenWidth(), getScreenHeight()); + if (currentWallpaper.isBuiltIn()) { + wallpaper.setImage(WALLPAPERS.get(currentWallpaper.location)); + } else { + wallpaper.setImage(currentWallpaper.url); + } + this.wallpaperLayout.addComponent(this.wallpaper); + this.wallpaperLayout.handleLoad(); + } + + @Override + public void render(GuiGraphics display) { + + } + + @Override + public void onShutdownRequest(ShutdownSource source) { + + } + + @Override + public boolean onBiosInterrupt(InterruptData interrupt) { + return false; + } + + private int getDeviceWidth() { + return getScreenWidth(); } - private static int getDeviceHeight() { - return getScreenHeight() + 2 * BORDER; + private int getDeviceHeight() { + return getScreenHeight(); } @Override @@ -312,9 +354,9 @@ public void removed() { /* Send system data */ this.updateSystemData(); - Laptop.pos = null; - Laptop.system = null; - Laptop.mainDrive = null; + this.pos = null; + this.system = null; + this.mainDrive = null; } private void updateSystemData() { @@ -332,9 +374,8 @@ private void updateSystemData() { /** * Handles Minecraft GUI resizing. * - * @param minecraft the Minecraft instance - * @param width the new width - * @param height the new height + * @param width the new width + * @param height the new height */ @Override public void resize(@NotNull Minecraft minecraft, int width, int height) { @@ -387,7 +428,7 @@ public void tick() { } @Override - public void render(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, float partialTicks) { + public void render(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { if (bsod != null) { renderBsod(graphics, mouseX, mouseY, partialTicks); return; @@ -395,8 +436,14 @@ public void render(final @NotNull GuiGraphics graphics, final int mouseX, final PoseStack.Pose last = graphics.pose().last(); + this.renderBackground(graphics, mouseX, mouseY, partialTicks); + try { - renderLaptop(graphics, mouseX, mouseY, partialTicks); + graphics.pose().pushPose(); + graphics.pose().translate(0, 0, 1000); + + renderMineOS(graphics, mouseX, mouseY, partialTicks); + graphics.pose().popPose(); } catch (NullPointerException e) { while (graphics.pose().last() != last) { graphics.pose().popPose(); @@ -410,13 +457,19 @@ public void render(final @NotNull GuiGraphics graphics, final int mouseX, final RenderSystem.disableScissor(); bsod(e); } + + while (graphics.pose().last() != last) { + UltreonDevicesMod.LOGGER.warn("Pose stack leakage: {}", graphics.pose().last()); + graphics.pose().popPose(); + } + + if (GLHelper.clearScissorStack()) { + UltreonDevicesMod.LOGGER.debug("Scissor stack leakage!"); + } } public void renderBsod(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, float partialTicks) { - renderBezels(graphics, mouseX, mouseY, partialTicks); - int posX = (width - getDeviceWidth()) / 2; - int posY = (height - getDeviceHeight()) / 2; - graphics.fill(posX+10, posY+10, posX + getDeviceWidth()-10, posY + getDeviceHeight()-10, new Color(0, 0, 255).getRGB()); + graphics.fill(0, 0, getDeviceWidth(), getDeviceHeight(), new Color(0, 0, 255).getRGB()); var bo = new ByteArrayOutputStream(); double scale = Minecraft.getInstance().getWindow().getGuiScale(); @@ -424,24 +477,24 @@ public void renderBsod(final @NotNull GuiGraphics graphics, final int mouseX, fi var b = new PrintStream(bo); bsod.throwable.printStackTrace(b); var str = bo.toString(); - drawLines(graphics, Laptop.getFont(), str, posX+10, posY+10+getFont().lineHeight*2, (int) ((getDeviceWidth() - 10) * scale), new Color(255, 255, 255).getRGB()); + drawLines(graphics, MineOS.getFont(), str, 0, getFont().lineHeight * 2, (int) ((getDeviceWidth()) * scale), new Color(255, 255, 255).getRGB()); graphics.pose().pushPose(); graphics.pose().scale(2, 2, 0); - graphics.pose().translate((posX+10)/2f,(posY+10)/2f,0); + graphics.pose().translate((0) / 2f, (0) / 2f, 0); graphics.drawString(getFont(), "System has crashed!", 0, 0, new Color(255, 255, 255).getRGB()); graphics.pose().popPose(); } - public static void drawLines(GuiGraphics graphics, Font font, String text, int x, int y, int width, int color) { + public void drawLines(GuiGraphics graphics, Font font, String text, int x, int y, int width, int color) { var lines = new ArrayList(); font.getSplitter().splitLines(FormattedText.of(text.replaceAll("\r\n", "\n").replaceAll("\r", "\n")), width, Style.EMPTY).forEach(b -> lines.add(b.getString())); - var totalTextHeight = font.lineHeight*lines.size(); - var textScale = (instance.videoInfo.getResolution().height()-20-(getFont().lineHeight*2))/(float)totalTextHeight; + var totalTextHeight = font.lineHeight * lines.size(); + var textScale = (videoInfo.getResolution().height() - 10 - (getFont().lineHeight * 2)) / (float) totalTextHeight; textScale = (float) (1f / Minecraft.getInstance().getWindow().getGuiScale()); textScale = Math.max(0.5f, textScale); graphics.pose().pushPose(); graphics.pose().scale(textScale, textScale, 1); - graphics.pose().translate(x / textScale, (y+3)/textScale, 0); + graphics.pose().translate(x / textScale, (y + 3) / textScale, 0); //poseStack.translate(); var lineNr = 0; for (String s : lines) { @@ -451,39 +504,6 @@ public static void drawLines(GuiGraphics graphics, Font font, String text, int x graphics.pose().popPose(); } - public void renderBezels(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, float partialTicks) { - tasks.clear(); - - this.renderBackground(graphics); - - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - RenderSystem.setShaderTexture(0, LAPTOP_GUI); - - //*************************// - // Physical Screen // - //*************************// - int deviceWidth = videoInfo.getResolution().width() + BORDER * 2; - int deviceHeight = videoInfo.getResolution().height() + BORDER * 2; - int posX = (width - deviceWidth) / 2; - int posY = (height - deviceHeight) / 2; - - // Corners - graphics.blit(LAPTOP_GUI, posX, posY, 0, 0, BORDER, BORDER); // TOP-LEFT - graphics.blit(LAPTOP_GUI, posX + deviceWidth - BORDER, posY, 11, 0, BORDER, BORDER); // TOP-RIGHT - graphics.blit(LAPTOP_GUI, posX + deviceWidth - BORDER, posY + deviceHeight - BORDER, 11, 11, BORDER, BORDER); // BOTTOM-RIGHT - graphics.blit(LAPTOP_GUI, posX, posY + deviceHeight - BORDER, 0, 11, BORDER, BORDER); // BOTTOM-LEFT - - // Edges - graphics.blit(LAPTOP_GUI, posX + BORDER, posY, getScreenWidth(), BORDER, 10, 0, 1, BORDER, 256, 256); // TOP - graphics.blit(LAPTOP_GUI, posX + deviceWidth - BORDER, posY + BORDER, BORDER, getScreenHeight(), 11, 10, BORDER, 1, 256, 256); // RIGHT - graphics.blit(LAPTOP_GUI, posX + BORDER, posY + deviceHeight - BORDER, getScreenWidth(), BORDER, 10, 11, 1, BORDER, 256, 256); // BOTTOM - graphics.blit(LAPTOP_GUI, posX, posY + BORDER, BORDER, getScreenHeight(), 0, 11, BORDER, 1, 256, 256); // LEFT - - // Center - graphics.blit(LAPTOP_GUI, posX + BORDER, posY + BORDER, getScreenWidth(), getScreenHeight(), 10, 10, 1, 1, 256, 256); - - } - /** * Render the laptop screen. * @@ -492,25 +512,20 @@ public void renderBezels(final @NotNull GuiGraphics graphics, final int mouseX, * @param mouseY the current mouse Y position. * @param partialTicks the rendering partial ticks that forge give use (which is useless here). */ - public void renderLaptop(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, float partialTicks) { - int posX = (width - getDeviceWidth()) / 2; - int posY = (height - getDeviceHeight()) / 2; + public void renderMineOS(final @NotNull GuiGraphics graphics, final int mouseX, final int mouseY, float partialTicks) { // Fixes the strange partialTicks that Forge decided to give us - final float frameTime = Minecraft.getInstance().getFrameTime(); for (Runnable task : tasks) { task.run(); } - - renderBezels(graphics, mouseX, mouseY, partialTicks); - GLHelper.pushScissor(posX, posY, videoInfo.getResolution().width() + BORDER, videoInfo.getResolution().height() + BORDER); + GLHelper.pushScissor(graphics, 0, 0, videoInfo.getResolution().width(), videoInfo.getResolution().height()); //*******************// // Wallpaper // //*******************// //RenderSystem.setShaderTexture(0, WALLPAPERS.get(currentWallpaper)); - //RenderUtil.drawRectWithTexture(pose, posX + 10, posY + 10, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 512, 288); + //RenderUtil.drawRectWithTexture(pose, 0 + 0, 0 + 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 512, 288); Image.CACHE.forEach((s, cachedImage) -> cachedImage.delete()); - this.wallpaperLayout.render(graphics, this, this.minecraft, posX+10, posY+10, mouseX, mouseY, true, partialTicks); + this.wallpaperLayout.render(graphics, this, this.minecraft, 0, 0, mouseX, mouseY, true, partialTicks); boolean insideContext = false; if (context != null) { insideContext = isMouseInside(mouseX, mouseY, context.xPosition, context.yPosition, context.xPosition + context.width, context.yPosition + context.height); @@ -521,23 +536,21 @@ public void renderLaptop(final @NotNull GuiGraphics graphics, final int mouseX, //****************// graphics.pose().pushPose(); { - // Window[] windows1 = Arrays.stream(windows.toArray()).filter(Objects::nonNull).toArray(Window[]::new); + // Window[] windows1 = Arrays.stream(windows.toArray()).filter(Objects::nonNull).toArray(Window[]::new); for (int i = windows.size() - 1; i >= 0; i--) { var window = windows.get(i); if (window != null) { PoseStack.Pose last = graphics.pose().last(); try { - if (i == 0) { - window.render(graphics, this, minecraft, posX + BORDER, posY + BORDER, mouseX, mouseY, !insideContext, partialTicks); - } else { - window.render(graphics, this, minecraft, posX + BORDER, posY + BORDER, Integer.MAX_VALUE, Integer.MAX_VALUE, false, partialTicks); - } + if (i == 0) + renderWin(graphics, mouseX, mouseY, partialTicks, window, this, minecraft, 0, 0, insideContext); + else + renderWin(graphics, Integer.MAX_VALUE, Integer.MAX_VALUE, partialTicks, window, this, minecraft, 0, 0, insideContext); } catch (Exception e) { - while (graphics.pose().last() != last) { - graphics.pose().popPose(); - } + while (graphics.pose().last() != last) graphics.pose().popPose(); + RenderSystem.disableScissor(); - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("Error rendering window", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); CompoundTag intent = new CompoundTag(); @@ -546,7 +559,7 @@ public void renderLaptop(final @NotNull GuiGraphics graphics, final int mouseX, if (info != null) { intent.putString("name", info.getName()); } - openApplication(ApplicationManager.getApplication(Devices.id("diagnostics")), intent); + openApplication(ApplicationManager.getApplication(UltreonDevicesMod.res("diagnostics")), intent); closeApplication(app); } } @@ -554,11 +567,11 @@ public void renderLaptop(final @NotNull GuiGraphics graphics, final int mouseX, } } } - bar.render(graphics, this, minecraft, posX + 10, posY + getDeviceHeight() - 28, mouseX, mouseY, frameTime); + bar.render(graphics, this, minecraft, 0, getDeviceHeight() - TaskBar.BAR_HEIGHT, mouseX, mouseY, partialTicks); - graphics.pose().translate(0, 0, 100); + graphics.pose().translate(0, 0, 200); if (context != null) { - context.render(graphics, this, minecraft, context.xPosition, context.yPosition, mouseX, mouseY, true, frameTime); + context.render(graphics, this, minecraft, context.xPosition, context.yPosition, mouseX, mouseY, true, partialTicks); } graphics.pose().popPose(); @@ -578,30 +591,27 @@ public void renderLaptop(final @NotNull GuiGraphics graphics, final int mouseX, return false; }); - super.render(graphics, mouseX, mouseY, frameTime); GLHelper.popScissor(); GLHelper.clearScissorStack(); } + private static void renderWin(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks, Window window, MineOS mineOS, Minecraft minecraft1, int x, int y, boolean insideContext) { +// FrameBuffer frameBuffer = window.getFrameBuffer(); +// frameBuffer.begin(); + window.render(graphics, mineOS, minecraft1, window.offsetX, window.offsetY, mouseX, mouseY, partialTicks, !insideContext); +// frameBuffer.end(); +// +// frameBuffer.blit(graphics, 0, 0, window.width, window.height); + } + private boolean isMouseInside(int mouseX, int mouseY, int startX, int startY, int endX, int endY) { return mouseX >= startX && mouseX <= endX && mouseY >= startY && mouseY <= endY; } - @Override - public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { - try { - return mouseClickedInternal(mouseX, mouseY, mouseButton); - } catch (NullPointerException e) { - bsod(e);// null - } catch (Exception e) { - bsod(e); - } - return super.mouseClicked(mouseX, mouseY, mouseButton); - } - private void bsod(Throwable e) { + protected void bsod(Throwable e) { this.bsod = new BSOD(e); - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("BSOD", e); } public VideoInfo getVideoInfo() { @@ -611,6 +621,7 @@ public VideoInfo getVideoInfo() { public void setDisplayResolution(PredefinedResolution newValue) { if (this.videoInfo != null) { this.videoInfo.setResolution(newValue); + this.display.setResolution(newValue); } } @@ -618,20 +629,50 @@ public void revalidate() { } + public Bios getBios() { + return bios; + } + + @Override + public void connectDisplay(Display display) { + this.display = display; + } + + @Override + public void disconnectDisplay() { + this.display = null; + } + + public UUID generateWindowId() { + UUID id; + int attempts = 0; + do { + id = UUID.randomUUID(); + attempts++; + + if (attempts > 1000) { + throw new IllegalStateException("Failed to generate window id after 500 attempts"); + } + } while (windowById.containsKey(id)); + + if (attempts > 50) { + UltreonDevicesMod.LOGGER.warn("Slowly generated window ID after {} attempts. Is the window manager overloaded?", attempts); + } + + return id; + } + private static final class BSOD { private final Throwable throwable; + public BSOD(Throwable e) { this.throwable = e; } } - @SuppressWarnings("unchecked") - public boolean mouseClickedInternal(double mouseX, double mouseY, int mouseButton) { - this.lastMouseX = (int) mouseX; - this.lastMouseY = (int) mouseY; - - int posX = (width - getScreenWidth()) / 2; - int posY = (height - getScreenHeight()) / 2; + @Override + @SuppressWarnings("unchecked") + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { if (this.context != null) { int dropdownX = context.xPosition; int dropdownY = context.yPosition; @@ -643,7 +684,7 @@ public boolean mouseClickedInternal(double mouseX, double mouseY, int mouseButto } } - this.bar.handleClick(this, posX, posY + getScreenHeight() - TaskBar.BAR_HEIGHT, (int) mouseX, (int) mouseY, mouseButton); + this.bar.handleClick(this, 0, getScreenHeight() - TaskBar.BAR_HEIGHT, (int) mouseX, (int) mouseY, mouseButton); for (int i = 0; i < windows.size(); i++) { Window window = (Window) windows.get(i); @@ -656,7 +697,7 @@ public boolean mouseClickedInternal(double mouseX, double mouseY, int mouseButto updateWindowStack(); windows.add(0, window); - windows.get(0).handleMouseClick(this, posX, posY, (int) mouseX, (int) mouseY, mouseButton); + window.handleMouseClick(this, 0, 0, (int) mouseX, (int) mouseY, mouseButton); if (isMouseWithinWindowBar((int) mouseX, (int) mouseY, dialogWindow)) { dragWindowFromX = mouseX - dialogWindow.offsetX; @@ -674,18 +715,18 @@ public boolean mouseClickedInternal(double mouseX, double mouseY, int mouseButto break; } } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("An error has occurred.", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); - if (windows.size() == 0 || windows.get(0) == null) { + if (windows.isEmpty()) { CompoundTag intent = new CompoundTag(); AppInfo info = window.content.getInfo(); if (info != null) { intent.putString("name", info.getName()); } - openApplication(ApplicationManager.getApplication(Devices.id("diagnostics")), intent); + openApplication(ApplicationManager.getApplication(UltreonDevicesMod.id("diagnostics")), intent); } else { - windows.get(0).openDialog(message); + window.openDialog(message); } } } @@ -711,7 +752,7 @@ public boolean mouseReleased(double mouseX, double mouseY, int state) { windows.get(0).handleMouseRelease((int) mouseX, (int) mouseY, state); } } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("An error has occurred.", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); windows.get(0).openDialog(message); @@ -719,6 +760,11 @@ public boolean mouseReleased(double mouseX, double mouseY, int state) { return true; } + @Override + public boolean mouseReleased(int mouseX, int mouseY, int state) { + return false; + } + @Override public void afterKeyboardAction() { // if (Keyboard.getEventKeyState()) { @@ -739,12 +785,12 @@ public void afterKeyboardAction() { @Override public boolean charTyped(char codePoint, int modifiers) { - boolean override = super.charTyped(codePoint, modifiers); + boolean override = false; try { if (!override && windows.get(0) != null) windows.get(0).handleCharTyped(codePoint, modifiers); } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("An error has occurred.", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); windows.get(0).openDialog(message); @@ -754,48 +800,44 @@ public boolean charTyped(char codePoint, int modifiers) { @Override public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) { - final boolean override = super.keyPressed(keyCode, scanCode, modifiers); + final boolean override = false; try { if (!pressed.contains(keyCode) && !override && windows.get(0) != null) { windows.get(0).handleKeyPressed(keyCode, scanCode, modifiers); } } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("An error has occurred.", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); windows.get(0).openDialog(message); } pressed.add(keyCode); - return super.keyPressed(keyCode, scanCode, modifiers); + return true; } @Override public boolean keyReleased(int keyCode, int scanCode, int modifiers) { pressed.remove(keyCode); - boolean b = super.keyReleased(keyCode, scanCode, modifiers); - try { if (keyCode >= 32 && keyCode < 256 && windows.get(0) != null) { windows.get(0).handleKeyReleased(keyCode, scanCode, modifiers); return true; } } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("An error has occurred.", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); windows.get(0).openDialog(message); } - return b; + + return true; } @SuppressWarnings("unchecked") @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { - int posX = (width - getScreenWidth()) / 2; - int posY = (height - getScreenHeight()) / 2; - try { if (this.context != null) { int dropdownX = context.xPosition; @@ -811,7 +853,7 @@ public boolean mouseDragged(double mouseX, double mouseY, int button, double dra Window dialogWindow = window.getContent().getActiveDialog(); if (dragging) { if (isMouseOnScreen((int) mouseX, (int) mouseY) && dragWindowFromX != null && dragWindowFromY != null) { - Objects.requireNonNullElse(dialogWindow, window).handleWindowMove(posX, posY, (int) ((dragX + mouseX) - dragWindowFromX), (int) ((dragY + mouseY) - dragWindowFromY)); + Objects.requireNonNullElse(dialogWindow, window).handleWindowMove(0, 0, (int) ((dragX + mouseX) - dragWindowFromX), (int) ((dragY + mouseY) - dragWindowFromY)); } else { dragging = false; } @@ -822,13 +864,11 @@ public boolean mouseDragged(double mouseX, double mouseY, int button, double dra } } } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("An error has occurred.", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); windows.get(0).openDialog(message); } - this.lastMouseX = (int) mouseX; - this.lastMouseY = (int) mouseY; return true; } @@ -838,14 +878,14 @@ public void mouseMoved(double pMouseX, double pMouseY) { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { - if (delta != 0) { + public boolean mouseScrolled(double mouseX, double mouseY, double deltaX, double deltaY) { + if (deltaY != 0) { try { if (windows.get(0) != null) { - windows.get(0).handleMouseScroll((int) mouseX, (int) mouseY, delta, delta >= 0); + windows.get(0).handleMouseScroll((int) mouseX, (int) mouseY, deltaY, deltaY >= 0); } } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("An error has occurred.", e); Dialog.Message message = new Dialog.Message("An error has occurred.\nSend logs to devs."); message.setTitle("Error"); windows.get(0).openDialog(message); @@ -855,7 +895,7 @@ public boolean mouseScrolled(double mouseX, double mouseY, double delta) { } public void renderComponentTooltip(@NotNull GuiGraphics graphics, @NotNull List tooltips, int x, int y) { - graphics.renderComponentTooltip(minecraft.font, tooltips, x, y); + graphics.renderComponentTooltip(font, tooltips, x, y); } @SuppressWarnings("ReassignedVariable") @@ -863,15 +903,14 @@ public Pair sendApplicationToFront(AppInfo info) { int i = 0; for (; i < windows.size(); i++) { Window window = windows.get(i); - if (window != null && window.content instanceof Application && ((Application) window.content).getInfo() == info) { + if (window != null && window.content instanceof Application application && application.getInfo() == info) { windows.remove(i); updateWindowStack(); windows.add(0, window); - i--; - return Pair.of((Application) window.content, true); + return new Pair<>(application, true); } } - return Pair.of(null, false); + return new Pair<>(null, false); } @Override @@ -882,9 +921,9 @@ public Application openApplication(AppInfo info) { @Override public Application openApplication(AppInfo info, CompoundTag intentTag) { Optional optional = APPLICATIONS.stream().filter(app -> app.getInfo() == info).findFirst(); - Application[] a = new Application[]{null}; - optional.ifPresent(application -> a[0] = openApplication(application, intentTag)); - return a[0]; + Application[] app = new Application[]{null}; + optional.ifPresent(application -> app[0] = openApplication(application, intentTag)); + return app[0]; } private Application openApplication(Application app, CompoundTag intent) { @@ -898,11 +937,11 @@ private Application openApplication(Application app, CompoundTag intent) { try { var q = sendApplicationToFront(app.getInfo()); - if (q.right()) - return q.left(); + if (q.getSecond()) + return q.getFirst(); if (app instanceof SystemApp) { - ((SystemApp) app).setLaptop(this); + ((SystemApp) app).setOS(this); } if (app instanceof SystemAccessor) { @@ -910,7 +949,7 @@ private Application openApplication(Application app, CompoundTag intent) { } Window window = new Window<>(app, this); - window.init((width - getScreenWidth()) / 2, (height - getScreenHeight()) / 2, intent); + window.init((window.width - getScreenWidth()) / 2, (window.height - getScreenHeight()) / 2, intent); if (appData.contains(app.getInfo().getFormattedId())) { app.load(appData.getCompound(app.getInfo().getFormattedId())); @@ -922,22 +961,21 @@ private Application openApplication(Application app, CompoundTag intent) { addWindow(window); - Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1f)); + this.kernel.playSound(SoundEvents.UI_BUTTON_CLICK.value()); } catch (Exception e) { - e.printStackTrace(); - AppInfo info = ApplicationManager.getApplication(Devices.id("diagnostics")); - system.openApplication(info); + UltreonDevicesMod.LOGGER.error("Failed to open application", e); + AppInfo info = ApplicationManager.getApplication(UltreonDevicesMod.res("diagnostics")); + openApplication(info); } return app; } - @Override public Pair openApplication(AppInfo info, File file) { if (isApplicationNotInstalled(info)) - return Pair.of(null, false); + return new Pair<>(null, false); if (isInvalidApplication(info)) - return Pair.of(null, false); + return new Pair<>(null, false); try { Optional optional = APPLICATIONS.stream().filter(app -> app.getInfo() == info).findFirst(); @@ -950,20 +988,19 @@ public Pair openApplication(AppInfo info, File file) { if (!alreadyRunning) { closeApplication(application); } - return Pair.of(application, false); + return new Pair<>(application, false); } - return Pair.of(application, true); + return new Pair<>(application, true); } } } catch (Exception e) { - e.printStackTrace(); - AppInfo info1 = ApplicationManager.getApplication(Devices.id("diagnostics")); - system.openApplication(info1); + UltreonDevicesMod.LOGGER.error("Failed to open application", e); + AppInfo info1 = ApplicationManager.getApplication(UltreonDevicesMod.res("diagnostics")); + openApplication(info1); } - return Pair.of(null, true); + return new Pair<>(null, true); } - @Override public void closeApplication(AppInfo info) { Optional optional = APPLICATIONS.stream().filter(app -> app.getInfo() == info).findFirst(); optional.ifPresent(this::closeApplication); @@ -984,7 +1021,7 @@ private void closeApplication(Application app) { } if (app instanceof SystemApp) { - ((SystemApp) app).setLaptop(null); + ((SystemApp) app).setOS(null); } window.handleClose(); @@ -1001,6 +1038,7 @@ private void addWindow(Window window) { updateWindowStack(); windows.add(0, window); + windowById.put(window.windowId, window); } private void updateWindowStack() { @@ -1026,29 +1064,21 @@ private boolean hasReachedWindowLimit() { } private boolean isMouseOnScreen(int mouseX, int mouseY) { - int posX = (width - getScreenWidth()) / 2; - int posY = (height - getScreenHeight()) / 2; - return isMouseInside(mouseX, mouseY, posX, posY, posX + getScreenWidth(), posY + getScreenHeight()); + return isMouseInside(mouseX, mouseY, 0, 0, getScreenWidth(), getScreenHeight()); } private boolean isMouseWithinWindowBar(int mouseX, int mouseY, Window window) { if (window == null) return false; - int posX = (width - getScreenWidth()) / 2; - int posY = (height - getScreenHeight()) / 2; - return isMouseInside(mouseX, mouseY, posX + window.offsetX + 1, posY + window.offsetY + 1, posX + window.offsetX + window.width - 13, posY + window.offsetY + 11); + return isMouseInside(mouseX, mouseY, window.offsetX + 1, window.offsetY + 1, window.offsetX + window.width - 1, window.offsetY + 11); } private boolean isMouseWithinWindow(int mouseX, int mouseY, Window window) { if (window == null) return false; - int posX = (width - getScreenWidth()) / 2; - int posY = (height - getScreenHeight()) / 2; - return isMouseInside(mouseX, mouseY, posX + window.offsetX, posY + window.offsetY, posX + window.offsetX + window.width, posY + window.offsetY + window.height); + return isMouseInside(mouseX, mouseY, window.offsetX, window.offsetY, window.offsetX + window.width, window.offsetY + window.height); } public boolean isMouseWithinApp(int mouseX, int mouseY, Window window) { - int posX = (width - getScreenWidth()) / 2; - int posY = (height - getScreenHeight()) / 2; - return isMouseInside(mouseX, mouseY, posX + window.offsetX + 1, posY + window.offsetY + 13, posX + window.offsetX + window.width - 1, posY + window.offsetY + window.height - 1); + return isMouseInside(mouseX, mouseY, window.offsetX + 1, window.offsetY + 3, window.offsetX + window.width - 1, window.offsetY + window.height - 1); } public boolean isApplicationRunning(AppInfo info) { @@ -1063,14 +1093,14 @@ public boolean isApplicationRunning(AppInfo info) { public void nextWallpaper() { if (!currentWallpaper.isBuiltIn()) return; if (currentWallpaper.location + 1 < WALLPAPERS.size()) { - this.currentWallpaper = new Wallpaper(currentWallpaper.location+1); + this.currentWallpaper = new Wallpaper(currentWallpaper.location + 1); } wallpaperUpdated(); } public void prevWallpaper() { if (currentWallpaper.location - 1 >= 0) { - this.currentWallpaper = new Wallpaper(currentWallpaper.location-1); + this.currentWallpaper = new Wallpaper(currentWallpaper.location - 1); } wallpaperUpdated(); } @@ -1098,7 +1128,7 @@ public Wallpaper getCurrentWallpaper() { } public List getWallapapers() { - return ImmutableList.copyOf(WALLPAPERS); + return List.copyOf(WALLPAPERS); } @Nullable @@ -1108,7 +1138,7 @@ public Application getApplication(String appId) { @Override public List getInstalledApplications() { - return ImmutableList.copyOf(installedApps); + return List.copyOf(installedApps); } public boolean isApplicationInstalled(AppInfo info) { @@ -1120,8 +1150,8 @@ public boolean isApplicationNotInstalled(AppInfo info) { } private boolean isValidApplication(AppInfo info) { - if (Devices.hasAllowedApplications()) { - return Devices.getAllowedApplications().contains(info); + if (UltreonDevicesMod.hasAllowedApplications()) { + return UltreonDevicesMod.getAllowedApplications().contains(info); } return true; } @@ -1172,6 +1202,7 @@ public TaskBar getTaskBar() { return bar; } + @Override public Settings getSettings() { return settings; } @@ -1181,19 +1212,16 @@ public boolean isPauseScreen() { return false; } - @Override public void openContext(Layout layout, int x, int y) { layout.updateComponents(x, y); context = layout; layout.init(); } - @Override public boolean hasContext() { return context != null; } - @Override public void closeContext() { context = null; dragging = false; @@ -1215,7 +1243,7 @@ private Wallpaper(CompoundTag tag) { var url = tag.getString("url"); var location = tag.getInt("location"); if (tag.contains("url", 8)) { - if (!OnlineRequest.isSafeAddress(url)) { + if (OnlineRequest.isUnsafeAddress(url)) { // Reset to default wallpaper. this.url = null; this.location = 0; @@ -1228,6 +1256,7 @@ private Wallpaper(CompoundTag tag) { this.location = location; } } + private Wallpaper(String url) { this.url = url; this.location = -87; diff --git a/common/src/main/java/dev/ultreon/devices/mineos/client/MineOSKernel.java b/common/src/main/java/dev/ultreon/devices/mineos/client/MineOSKernel.java new file mode 100644 index 000000000..b720aeb8d --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/mineos/client/MineOSKernel.java @@ -0,0 +1,23 @@ +package dev.ultreon.devices.mineos.client; + +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.mineos.DriverManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.sounds.SimpleSoundInstance; +import net.minecraft.sounds.SoundEvent; + +public class MineOSKernel { + private static final DriverManager driverManager = new DriverManager(); + + public void boot(MineOS mineOS, Bios bios) { + this.loadDrivers(mineOS, bios); + } + + private void loadDrivers(MineOS mineOS, Bios bios) { + + } + + public void playSound(SoundEvent sound) { + Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(sound, 1f, 1f)); + } +} diff --git a/common/src/main/java/com/ultreon/devices/core/Settings.java b/common/src/main/java/dev/ultreon/devices/mineos/client/Settings.java similarity index 83% rename from common/src/main/java/com/ultreon/devices/core/Settings.java rename to common/src/main/java/dev/ultreon/devices/mineos/client/Settings.java index 7dbdae741..b4583268e 100644 --- a/common/src/main/java/com/ultreon/devices/core/Settings.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/client/Settings.java @@ -1,12 +1,10 @@ -package com.ultreon.devices.core; +package dev.ultreon.devices.mineos.client; -import com.ultreon.devices.object.AppInfo; -import com.ultreon.devices.programs.system.object.ColorScheme; -import com.ultreon.devices.programs.system.object.Preset; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.mineos.apps.system.object.ColorScheme; +import dev.ultreon.devices.mineos.apps.system.object.Preset; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceLocation; -import org.intellij.lang.annotations.Identifier; /** * @author MrCrayfish @@ -53,7 +51,7 @@ public CompoundTag toTag() { private CompoundTag appTintInfo() { var ct = new CompoundTag(); - for (AppInfo installedApplication : Laptop.getSystem().getInstalledApplications()) { + for (AppInfo installedApplication : MineOS.getOpened().getInstalledApplications()) { ct.put(installedApplication.getId().toString(), installedApplication.getTintProvider().toTag()); } return ct; diff --git a/common/src/main/java/dev/ultreon/devices/mineos/client/TaskBar.java b/common/src/main/java/dev/ultreon/devices/mineos/client/TaskBar.java new file mode 100644 index 000000000..75499f6e7 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/mineos/client/TaskBar.java @@ -0,0 +1,196 @@ +package dev.ultreon.devices.mineos.client; + +import com.mojang.blaze3d.systems.RenderSystem; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.DebugLog; +import dev.ultreon.devices.api.TrayItemAdder; +import dev.ultreon.devices.api.event.LaptopEvent; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.core.network.TrayItemWifi; +import dev.ultreon.devices.api.util.Color; +import dev.ultreon.devices.api.util.Vulnerability; +import dev.ultreon.devices.object.AppInfo; +import dev.ultreon.devices.object.TrayItem; +import dev.ultreon.devices.mineos.apps.system.AppStore; +import dev.ultreon.devices.mineos.apps.system.FileBrowserApp; +import dev.ultreon.devices.mineos.apps.system.SettingsApp; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import java.util.ArrayList; +import java.util.List; + +public class TaskBar { + public static final ResourceLocation APP_BAR_GUI = new ResourceLocation("devices:textures/gui/application_bar.png"); + public static final int BAR_HEIGHT = 18; + private static final int APPS_DISPLAYED = UltreonDevicesMod.DEVELOPER_MODE ? 18 : 10; + + private final CompoundTag tag; + + private final MineOS mineOS; + + private final int offset = 0; + + private final List trayItems = new ArrayList<>(); + + /** + * @deprecated use {@link #TaskBar(MineOS, CompoundTag)} instead. + */ + @Deprecated + public TaskBar(MineOS mineOS) { + this(mineOS, new CompoundTag()); + } + + public TaskBar(MineOS mineOS, CompoundTag tag) { + this.mineOS = mineOS; + this.tag = tag; + + var trayItemsTag = tag.getCompound("TrayItems"); + + addTrayItem(new Vulnerability.VulnerabilityTrayItem(), trayItemsTag); + addTrayItem(new FileBrowserApp.FileBrowserTrayItem(), trayItemsTag); + addTrayItem(new SettingsApp.SettingsTrayItem(), trayItemsTag); + addTrayItem(new AppStore.StoreTrayItem(), trayItemsTag); + addTrayItem(new TrayItemWifi(), trayItemsTag); + + TrayItemAdder trayItemAdder = new TrayItemAdder(this.trayItems); + LaptopEvent.SETUP_TRAY_ITEMS.invoker().setupTrayItems(mineOS, trayItemAdder); + } + + public void addTrayItem(TrayItem trayItem, CompoundTag tag) { + this.trayItems.add(trayItem); + String strId = trayItem.getId().toString(); + if (tag.contains(strId)) { + CompoundTag trayTag = tag.getCompound(strId); + trayItem.deserialize(trayTag); + } + } + + public void init() { + this.trayItems.forEach(TrayItem::init); + } + + public void setupApplications() { + } + + public void init(int posX, int posY) { + init(); + } + + public void onTick() { + trayItems.forEach(TrayItem::tick); + } + + public void render(GuiGraphics display, MineOS mineOS, Minecraft minecraft, int x, int y, int mouseX, int mouseY, float partialTicks) { + RenderSystem.setShaderColor(1f, 1f, 1f, 0.75f); + RenderSystem.enableBlend(); + RenderSystem.setShaderTexture(0, APP_BAR_GUI); + + // r=217,g=230,b=255 + Color bgColor = new Color(mineOS.getSettings().getColorScheme().getBackgroundColor());//.brighter().brighter(); + float[] hsb = Color.RGBtoHSB(bgColor.getRed(), bgColor.getGreen(), bgColor.getBlue(), null); + bgColor = new Color(Color.HSBtoRGB(hsb[0], hsb[1], hsb[2])); + RenderSystem.setShaderColor(bgColor.getRed() / 255f, bgColor.getGreen() / 255f, bgColor.getBlue() / 255f, 1f); + + int trayItemsWidth = trayItems.size() * 14; + display.blit(APP_BAR_GUI, x, y, 1, 18, 0, 0, 1, 18, 256, 256); + display.blit(APP_BAR_GUI, x + 1, y, mineOS.getScreenWidth() - 36 - trayItemsWidth, 18, 1, 0, 1, 18, 256, 256); + display.blit(APP_BAR_GUI, x + mineOS.getScreenWidth() - 35 - trayItemsWidth, y, 35 + trayItemsWidth, 18, 2, 0, 1, 18, 256, 256); + + RenderSystem.disableBlend(); + + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + for (int i = 0; i < APPS_DISPLAYED && i < mineOS.installedApps.size(); i++) { + AppInfo info = mineOS.installedApps.get(i + offset); + RenderUtil.drawApplicationIcon(display, info, x + 2 + i * 16, y + 2); + if (mineOS.isApplicationRunning(info)) { + RenderSystem.setShaderTexture(0, APP_BAR_GUI); + display.blit(APP_BAR_GUI, x + 1 + i * 16, y + 1, 35, 0, 16, 16); + } + } + + assert minecraft.level == null || minecraft.player != null; + // assert minecraft.level != null; //can no longer assume + display.drawString(MineOS.getFont(), timeToString(minecraft.level != null ? minecraft.level.getDayTime() : 0), x + mineOS.getScreenWidth() - 31, y + 5, Color.WHITE.getRGB(), true); + + /* Settings App */ + int startX = x + mineOS.getScreenWidth() - 48; + for (int i = 0; i < trayItems.size(); i++) { + int posX = startX - (trayItems.size() - 1 - i) * 14; + if (isMouseInside(mouseX, mouseY, posX, y + 2, posX + 13, y + 15)) { + display.fill(posX, y + 2, posX + 14, y + 16, new Color(1f, 1f, 1f, 0.1f).getRGB()); + } + trayItems.get(i).getIcon().draw(display, minecraft, posX + 2, y + 4); + } + + RenderSystem.setShaderTexture(0, APP_BAR_GUI); + + /* Other Apps */ + if (isMouseInside(mouseX, mouseY, x + 1, y + 1, x + 236, y + 16)) { + int appIndex = (mouseX - x - 1) / 16; + if (appIndex >= 0 && appIndex < offset + APPS_DISPLAYED && appIndex < mineOS.installedApps.size()) { + display.blit(APP_BAR_GUI, x + appIndex * 16 + 1, y + 1, 35, 0, 16, 16); + display.renderComponentTooltip(MineOS.getFont(), List.of(Component.literal(mineOS.installedApps.get(appIndex).getName())), mouseX, mouseY); + } + } + + RenderSystem.setShaderColor(1f, 1f, 1f, 1f); + } + + public void handleClick(MineOS mineOS, int x, int y, int mouseX, int mouseY, int mouseButton) { + if (isMouseInside(mouseX, mouseY, x + 1, y + 1, x + 236, y + 16)) { + DebugLog.log("Clicked on task bar"); + int appIndex = (mouseX - x - 1) / 16; + if (appIndex >= 0 && appIndex <= offset + APPS_DISPLAYED && appIndex < mineOS.installedApps.size()) { + mineOS.openApplication(mineOS.installedApps.get(appIndex)); + return; + } + } + + int startX = x + mineOS.getScreenWidth() - 48; + for (int i = 0; i < trayItems.size(); i++) { + int posX = startX - (trayItems.size() - 1 - i) * 14; + if (isMouseInside(mouseX, mouseY, posX, y + 2, posX + 13, y + 15)) { + TrayItem trayItem = trayItems.get(i); + trayItem.handleClick(mouseX, mouseY, mouseButton); + DebugLog.log("Clicked on tray item (%d): %s".formatted(i, trayItem.getClass().getSimpleName())); + break; + } + } + } + + public boolean isMouseInside(int mouseX, int mouseY, int x1, int y1, int x2, int y2) { + return mouseX >= x1 && mouseX <= x2 && mouseY >= y1 && mouseY <= y2; + } + + public String timeToString(long time) { + int hours = (int) ((Math.floor(time / 1000d) + 6) % 24); + int minutes = (int) Math.floor((time % 1000) / 1000d * 60); + return String.format("%02d:%02d", hours, minutes); + } + + public MineOS getLaptop() { + return mineOS; + } + + public CompoundTag getTag() { + return tag; + } + + public CompoundTag serialize() { + var tag = new CompoundTag(); + CompoundTag trayItemsTag = new CompoundTag(); + for (TrayItem trayItem : trayItems) { + trayItemsTag.put(trayItem.getId().toString(), trayItem.serialize()); + } + tag.put("TrayItems", trayItemsTag); + + return tag; + } + + public int getHeight() { + return 16; + } +} diff --git a/common/src/main/java/com/ultreon/devices/core/Window.java b/common/src/main/java/dev/ultreon/devices/mineos/client/Window.java similarity index 66% rename from common/src/main/java/com/ultreon/devices/core/Window.java rename to common/src/main/java/dev/ultreon/devices/mineos/client/Window.java index 6356820a2..796d7d83d 100644 --- a/common/src/main/java/com/ultreon/devices/core/Window.java +++ b/common/src/main/java/dev/ultreon/devices/mineos/client/Window.java @@ -1,24 +1,27 @@ -package com.ultreon.devices.core; +package dev.ultreon.devices.mineos.client; import com.mojang.blaze3d.systems.RenderSystem; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.Dialog; -import com.ultreon.devices.gui.GuiButtonClose; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Dialog; +import dev.ultreon.devices.core.Wrappable; +import dev.ultreon.devices.gui.GuiButtonClose; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.util.FrameBuffer; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; - +import dev.ultreon.devices.api.util.Color; import org.jetbrains.annotations.Nullable; -import java.awt.*; + +import java.util.UUID; public class Window { public static final ResourceLocation WINDOW_GUI = new ResourceLocation("devices:textures/gui/application.png"); public static final int COLOR_WINDOW_DARK = new Color(0f, 0f, 0f, 0.25f).getRGB(); - final Laptop laptop; - double dragFromX; - double dragFromY; + final MineOS mineOS; protected GuiButtonClose btnClose; T content; int width, height; @@ -26,17 +29,22 @@ public class Window { Window dialogWindow = null; Window parent = null; protected boolean removed; + private Font font = Minecraft.getInstance().font; + UUID windowId; + private FrameBuffer frameBuffer; - public Window(T wrappable, Laptop laptop) { + public Window(T wrappable, MineOS mineOS) { this.content = wrappable; - this.laptop = laptop; + this.mineOS = mineOS; wrappable.setWindow(this); + this.windowId = mineOS.generateWindowId(); + frameBuffer = new FrameBuffer(new ResourceLocation("devices:generated/win_" + this.windowId.toString().replace("-", "_")), 1, 1); } void setWidth(int width) { this.width = width + 2; - if (this.width > Laptop.getScreenWidth()) { - this.width = Laptop.getScreenWidth(); + if (this.width > mineOS.getScreenWidth()) { + this.width = mineOS.getScreenWidth(); } } @@ -52,7 +60,7 @@ void init(int x, int y, @Nullable CompoundTag intent) { btnClose = new GuiButtonClose(x + offsetX + width - 12, y + offsetY + 1); content.init(intent); } catch (Exception e) { - e.printStackTrace(); + UltreonDevicesMod.LOGGER.error("Failed to initialize window", e); Window.this.close(); Dialog.Message message = new Dialog.Message("Error initializing window:\n" + e.getMessage()) { @@ -74,59 +82,59 @@ public void onTick() { content.onTick(); } - public void render(GuiGraphics graphics, Laptop gui, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean active, float partialTicks) { + public void render(GuiGraphics graphics, MineOS mineOS, Minecraft minecraft, int x, int y, int mouseX, int mouseY, float partialTicks, boolean active) { if (content.isPendingLayoutUpdate()) { this.setWidth(content.getWidth()); this.setHeight(content.getHeight()); - this.offsetX = (Laptop.getScreenWidth() - width) / 2; - this.offsetY = (Laptop.getScreenHeight() - TaskBar.BAR_HEIGHT - height) / 2; + this.offsetX = (this.mineOS.getScreenWidth() - width) / 2; + this.offsetY = (this.mineOS.getScreenHeight() - TaskBar.BAR_HEIGHT - height) / 2; updateComponents(x, y); content.clearPendingLayout(); } graphics.pose().pushPose(); - Color color = new Color(Laptop.getSystem().getSettings().getColorScheme().getWindowBackgroundColor()); + Color color = new Color(MineOS.getOpened().getSettings().getColorScheme().getWindowBackgroundColor()); RenderSystem.enableBlend(); RenderSystem.setShaderTexture(0, WINDOW_GUI); RenderSystem.setShaderColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1); /* Corners */ - graphics.blit(WINDOW_GUI,x + offsetX, y + offsetY, 0, 0, 1, 1); - graphics.blit(WINDOW_GUI,x + offsetX + width - 13, y + offsetY, 2, 0, 13, 13); - graphics.blit(WINDOW_GUI,x + offsetX + width - 1, y + offsetY + height - 1, 14, 14, 1, 1); - graphics.blit(WINDOW_GUI,x + offsetX, y + offsetY + height - 1, 0, 14, 1, 1); + graphics.blit(WINDOW_GUI, x, y, 0, 0, 1, 1); + graphics.blit(WINDOW_GUI, x + width - 13, y, 2, 0, 13, 13); + graphics.blit(WINDOW_GUI, x + width - 1, y + height - 1, 14, 14, 1, 1); + graphics.blit(WINDOW_GUI, x, y + height - 1, 0, 14, 1, 1); /* Edges */ - graphics.blit(WINDOW_GUI,x + offsetX + 1, y + offsetY, width - 14, 13, 1, 0, 1, 13, 256, 256); - graphics.blit(WINDOW_GUI,x + offsetX + width - 1, y + offsetY + 13, 1, height - 14, 14, 13, 1, 1, 256, 256); - graphics.blit(WINDOW_GUI,x + offsetX + 1, y + offsetY + height - 1, width - 2, 1, 1, 14, 13, 1, 256, 256); - graphics.blit(WINDOW_GUI,x + offsetX, y + offsetY + 13, 1, height - 14, 0, 13, 1, 1, 256, 256); + graphics.blit(WINDOW_GUI, x + 1, y, width - 14, 13, 1, 0, 1, 13, 256, 256); + graphics.blit(WINDOW_GUI, x + width - 1, y + 13, 1, height - 14, 14, 13, 1, 1, 256, 256); + graphics.blit(WINDOW_GUI, x + 1, y + height - 1, width - 2, 1, 1, 14, 13, 1, 256, 256); + graphics.blit(WINDOW_GUI, x, y + 13, 1, height - 14, 0, 13, 1, 1, 256, 256); /* Center */ - graphics.blit(WINDOW_GUI, x + offsetX + 1, y + offsetY + 13, width - 2, height - 14, 1, 13, 13, 1, 256, 256); + graphics.blit(WINDOW_GUI, x + 1, y + 13, width - 2, height - 14, 1, 13, 13, 1, 256, 256); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); String windowTitle = content.getWindowTitle(); - if (mc.font.width(windowTitle) > width - 2 - 13 - 3) { // window width, border, close button, padding, padding - windowTitle = mc.font.plainSubstrByWidth(windowTitle, width - 2 - 13 - 3); + if (MineOS.getFont().width(windowTitle) > width - 2 - 13 - 3) { // window width, border, close button, padding, padding + windowTitle = MineOS.getFont().plainSubstrByWidth(windowTitle, width - 2 - 13 - 3); } - graphics.drawString(mc.font, windowTitle, x + offsetX + 3, y + offsetY + 3, Color.WHITE.getRGB(), true); + graphics.drawString(font, windowTitle, x + 3, y + 3, Color.WHITE.getRGB(), true); btnClose.renderWidget(graphics, mouseX, mouseY, partialTicks); RenderSystem.disableBlend(); /* Render content */ - content.render(graphics, gui, mc, x + offsetX + 1, y + offsetY + 13, mouseX, mouseY, active && dialogWindow == null, partialTicks); + content.render(graphics, mineOS, minecraft, x + 1, y + 13, mouseX, mouseY, active && dialogWindow == null, partialTicks); RenderSystem.setShaderColor(1f, 1f, 1f, 1f); graphics.pose().translate(0, 0, 200); if (dialogWindow != null) { - graphics.fill(x + offsetX, y + offsetY, x + offsetX + width, y + offsetY + height, COLOR_WINDOW_DARK); - dialogWindow.render(graphics, gui, mc, x, y, mouseX, mouseY, active, partialTicks); + graphics.fill(x, y, x + width, y + height, COLOR_WINDOW_DARK); + dialogWindow.render(graphics, mineOS, minecraft, x, y, mouseX, mouseY, partialTicks, active); } graphics.pose().popPose(); @@ -175,30 +183,30 @@ public void handleKeyReleased(int keyCode, int scanCode, int modifiers) { } public void handleWindowMove(int screenStartX, int screenStartY, int newX, int newY) { - if (newX >= 0 && newX <= Laptop.getScreenWidth() - width) { + if (newX >= 0 && newX <= mineOS.getScreenWidth() - width) { this.offsetX = newX; } else if (newX < 0) { this.offsetX = 0; } else { - this.offsetX = Laptop.getScreenWidth() - width; + this.offsetX = mineOS.getScreenWidth() - width; } - if (newY >= 0 && newY <= Laptop.getScreenHeight() - TaskBar.BAR_HEIGHT - height) { + if (newY >= 0 && newY <= mineOS.getScreenHeight() - TaskBar.BAR_HEIGHT - height) { this.offsetY = newY; } else if (newY < 0) { this.offsetY = 0; } else { - this.offsetY = Laptop.getScreenHeight() - TaskBar.BAR_HEIGHT - height; + this.offsetY = mineOS.getScreenHeight() - TaskBar.BAR_HEIGHT - height; } updateComponents(screenStartX, screenStartY); } @SuppressWarnings("unused") - void handleMouseClick(Laptop gui, int x, int y, int mouseX, int mouseY, int mouseButton) { + void handleMouseClick(MineOS os, int x, int y, int mouseX, int mouseY, int mouseButton) { if (btnClose.isHovered()) { if (content instanceof Application) { - gui.closeApplication(((Application) content).getInfo()); + os.closeApplication(((Application) content).getInfo()); return; } @@ -208,7 +216,7 @@ void handleMouseClick(Laptop gui, int x, int y, int mouseX, int mouseY, int mous } if (dialogWindow != null) { - dialogWindow.handleMouseClick(gui, x, y, mouseX, mouseY, mouseButton); + dialogWindow.handleMouseClick(mineOS, x, y, mouseX, mouseY, mouseButton); return; } @@ -240,7 +248,9 @@ void handleMouseScroll(int mouseX, int mouseY, double delta, boolean direction) } public void handleClose() { - content.onClose(); + this.content.onClose(); + this.mineOS.windowById.remove(this.windowId); + this.frameBuffer.dispose(); } private void updateComponents(int x, int y) { @@ -253,7 +263,7 @@ public void openDialog(Dialog dialog) { if (dialogWindow != null) { dialogWindow.openDialog(dialog); } else { - dialogWindow = new Window<>(dialog, null); + dialogWindow = new Window<>(dialog, mineOS); dialogWindow.init(0, 0, null); dialogWindow.setParent(this); } @@ -273,7 +283,7 @@ public Window getDialogWindow() { public final void close() { this.removed = true; if (content instanceof Application) { - laptop.closeApplication(((Application) content).getInfo()); + mineOS.closeApplication(((Application) content).getInfo()); return; } if (parent != null) { @@ -292,4 +302,8 @@ public void setParent(Window parent) { public T getContent() { return content; } + + public FrameBuffer getFrameBuffer() { + return frameBuffer; + } } diff --git a/common/src/main/java/dev/ultreon/devices/minephone/MinePhoneOS.java b/common/src/main/java/dev/ultreon/devices/minephone/MinePhoneOS.java new file mode 100644 index 000000000..164cc57a6 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/minephone/MinePhoneOS.java @@ -0,0 +1,106 @@ +package dev.ultreon.devices.minephone; + +import dev.ultreon.devices.api.bios.Bios; +import dev.ultreon.devices.api.os.OSScreen; +import dev.ultreon.devices.api.video.CustomResolution; +import dev.ultreon.devices.block.entity.ComputerBlockEntity; +import dev.ultreon.devices.client.Display; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; + +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +public final class MinePhoneOS extends OSScreen { + private final ComputerBlockEntity computer; + private final Bios bios; + private final PhoneBootScreen bootDisplay = new PhoneBootScreen(); + private boolean booted; + + public MinePhoneOS(ComputerBlockEntity computer, Bios bios) { + super(); + this.computer = computer; + this.bios = bios; + + this.boot(bios); + } + + @Override + public void boot(Bios bios) { + CompletableFuture.runAsync(() -> { + // Simulate booting + try { + do { + bootDisplay.progress++; + Thread.sleep(100); + } while (bootDisplay.progress < bootDisplay.maxProgress); + + this.booted = true; + } catch (Exception e) { + this.bsod(e); + } + }); + } + + private void bsod(Exception e) { + + } + + @Override + public void render(GuiGraphics display) { + display.fill(0, 0, width, height, 0xff000000); + } + + @Override + public void afterKeyboardAction() { + + } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + return false; + } + + @Override + public Screen getScreen() { + return this; + } + + @Override + public void connectDisplay(Display display) { + display.setResolution(new CustomResolution(116, 216)); + + super.connectDisplay(display); + } + + @Override + public void disconnectDisplay() { + bios.powerOff(); + + super.disconnectDisplay(); + } + + public ComputerBlockEntity getComputer() { + return computer; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null || obj.getClass() != this.getClass()) return false; + var that = (MinePhoneOS) obj; + return Objects.equals(this.computer, that.computer); + } + + @Override + public int hashCode() { + return Objects.hash(computer); + } + + @Override + public String toString() { + return "MinePhoneOS[" + + "computer=" + computer + ']'; + } + +} diff --git a/common/src/main/java/dev/ultreon/devices/minephone/PhoneBootScreen.java b/common/src/main/java/dev/ultreon/devices/minephone/PhoneBootScreen.java new file mode 100644 index 000000000..7cc1c9e00 --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/minephone/PhoneBootScreen.java @@ -0,0 +1,25 @@ +package dev.ultreon.devices.minephone; + +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.client.Display; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; + +public class PhoneBootScreen implements PosRenderable { + private static final ResourceLocation PHONE_GUI = UltreonDevicesMod.res("textures/gui/minephone.png"); + int progress = 0; + final int maxProgress = 100; + + @Override + public void render(GuiGraphics guiGraphics, MinePhoneOS phoneOS, int mouseX, int mouseY, float partialTick) { + Display display = phoneOS.getDisplay(); + + int screenWidth = display.getScreenWidth(); + int screenHeight = display.getScreenHeight(); + + guiGraphics.blit(PHONE_GUI, screenWidth / 2 - 50, screenHeight - 40, 0, 0, 32, 32, 100, 20); + + guiGraphics.fill(0, 0, screenWidth, screenHeight, 0xff000000); + guiGraphics.fill(screenWidth / 2 - 50, screenHeight - 40, screenWidth / 2 + 50, screenHeight - 38, 0xffffffff); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/minephone/PosRenderable.java b/common/src/main/java/dev/ultreon/devices/minephone/PosRenderable.java new file mode 100644 index 000000000..3b2cd9ffe --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/minephone/PosRenderable.java @@ -0,0 +1,8 @@ +package dev.ultreon.devices.minephone; + +import net.minecraft.client.gui.GuiGraphics; + +public interface PosRenderable { + + void render(GuiGraphics guiGraphics, MinePhoneOS phoneOS, int mouseX, int mouseY, float partialTick); +} diff --git a/common/src/main/java/com/ultreon/devices/mixin/common/FontSetMixin.java b/common/src/main/java/dev/ultreon/devices/mixin/common/FontSetMixin.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/mixin/common/FontSetMixin.java rename to common/src/main/java/dev/ultreon/devices/mixin/common/FontSetMixin.java index 7f39778de..caa3fc35b 100644 --- a/common/src/main/java/com/ultreon/devices/mixin/common/FontSetMixin.java +++ b/common/src/main/java/dev/ultreon/devices/mixin/common/FontSetMixin.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.mixin.common; +package dev.ultreon.devices.mixin.common; import net.minecraft.client.gui.font.FontSet; import org.spongepowered.asm.mixin.Mixin; diff --git a/common/src/main/java/com/ultreon/devices/mixin/common/MinecraftMixin.java b/common/src/main/java/dev/ultreon/devices/mixin/common/MinecraftMixin.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/mixin/common/MinecraftMixin.java rename to common/src/main/java/dev/ultreon/devices/mixin/common/MinecraftMixin.java index dc2e0c6a5..3a7285318 100644 --- a/common/src/main/java/com/ultreon/devices/mixin/common/MinecraftMixin.java +++ b/common/src/main/java/dev/ultreon/devices/mixin/common/MinecraftMixin.java @@ -1,9 +1,5 @@ -package com.ultreon.devices.mixin.common; +package dev.ultreon.devices.mixin.common; -import com.ultreon.devices.ClientModEvents; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.object.AppInfo; import net.minecraft.client.Minecraft; import net.minecraft.client.main.GameConfig; import org.slf4j.Logger; diff --git a/common/src/main/java/com/ultreon/devices/mixin/common/MixinPlugin.java b/common/src/main/java/dev/ultreon/devices/mixin/common/MixinPlugin.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/mixin/common/MixinPlugin.java rename to common/src/main/java/dev/ultreon/devices/mixin/common/MixinPlugin.java index 0a53b9dd5..4b66102b5 100644 --- a/common/src/main/java/com/ultreon/devices/mixin/common/MixinPlugin.java +++ b/common/src/main/java/dev/ultreon/devices/mixin/common/MixinPlugin.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.mixin.common; +package dev.ultreon.devices.mixin.common; -import com.ultreon.devices.debug.DebugLog; import dev.architectury.injectables.targets.ArchitecturyTarget; -import org.objectweb.asm.Opcodes; +import dev.ultreon.devices.debug.DebugLog; import org.objectweb.asm.tree.ClassNode; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; @@ -39,7 +38,7 @@ public List getMixins() { } private static String getTrueName(String internalName) { - if (internalName.startsWith("com/ultreon/devices")) { + if (internalName.startsWith("dev/ultreon/devices")) { return ArchitecturyTarget.getCurrentTarget() + "/" + internalName; } return internalName; diff --git a/common/src/main/java/com/ultreon/devices/network/Packet.java b/common/src/main/java/dev/ultreon/devices/network/Packet.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/network/Packet.java rename to common/src/main/java/dev/ultreon/devices/network/Packet.java index 9be8fcb6e..c5b851de6 100644 --- a/common/src/main/java/com/ultreon/devices/network/Packet.java +++ b/common/src/main/java/dev/ultreon/devices/network/Packet.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.network; +package dev.ultreon.devices.network; import dev.architectury.networking.NetworkManager; import net.minecraft.network.FriendlyByteBuf; diff --git a/common/src/main/java/com/ultreon/devices/network/PacketHandler.java b/common/src/main/java/dev/ultreon/devices/network/PacketHandler.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/network/PacketHandler.java rename to common/src/main/java/dev/ultreon/devices/network/PacketHandler.java index a9096fffb..7920a298e 100644 --- a/common/src/main/java/com/ultreon/devices/network/PacketHandler.java +++ b/common/src/main/java/dev/ultreon/devices/network/PacketHandler.java @@ -1,12 +1,12 @@ -package com.ultreon.devices.network; +package dev.ultreon.devices.network; -import com.ultreon.devices.Devices; -import com.ultreon.devices.core.laptop.common.C2SUpdatePacket; -import com.ultreon.devices.core.laptop.common.S2CUpdatePacket; -import com.ultreon.devices.network.task.*; import dev.architectury.networking.NetworkChannel; import dev.architectury.networking.NetworkManager; import dev.architectury.utils.Env; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.core.laptop.common.C2SUpdatePacket; +import dev.ultreon.devices.core.laptop.common.S2CUpdatePacket; +import dev.ultreon.devices.network.task.*; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; @@ -16,7 +16,7 @@ import net.minecraft.world.level.Level; public class PacketHandler { - public static final NetworkChannel INSTANCE = NetworkChannel.create(Devices.id("main_channel")); + public static final NetworkChannel INSTANCE = NetworkChannel.create(UltreonDevicesMod.id("main_channel")); private static int id = 0; public static void init() { diff --git a/common/src/main/java/com/ultreon/devices/network/task/NotificationPacket.java b/common/src/main/java/dev/ultreon/devices/network/task/NotificationPacket.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/network/task/NotificationPacket.java rename to common/src/main/java/dev/ultreon/devices/network/task/NotificationPacket.java index ac10bcd66..2db78c412 100644 --- a/common/src/main/java/com/ultreon/devices/network/task/NotificationPacket.java +++ b/common/src/main/java/dev/ultreon/devices/network/task/NotificationPacket.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.network.task; +package dev.ultreon.devices.network.task; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.app.Notification; -import com.ultreon.devices.network.Packet; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.app.Notification; +import dev.ultreon.devices.network.Packet; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; @@ -30,7 +30,7 @@ public void toBytes(FriendlyByteBuf buf) { @Override public boolean onMessage(Supplier ctx) { - Devices.showNotification(notificationTag); + UltreonDevicesMod.showNotification(notificationTag); return true; } } diff --git a/common/src/main/java/com/ultreon/devices/network/task/RequestPacket.java b/common/src/main/java/dev/ultreon/devices/network/task/RequestPacket.java similarity index 71% rename from common/src/main/java/com/ultreon/devices/network/task/RequestPacket.java rename to common/src/main/java/dev/ultreon/devices/network/task/RequestPacket.java index bab8a0d09..2ac38610c 100644 --- a/common/src/main/java/com/ultreon/devices/network/task/RequestPacket.java +++ b/common/src/main/java/dev/ultreon/devices/network/task/RequestPacket.java @@ -1,10 +1,10 @@ -package com.ultreon.devices.network.task; +package dev.ultreon.devices.network.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.network.Packet; -import com.ultreon.devices.network.PacketHandler; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.network.Packet; +import dev.ultreon.devices.network.PacketHandler; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; @@ -41,10 +41,10 @@ public void toBytes(FriendlyByteBuf buf) { @Override public boolean onMessage(Supplier ctx) { - //DebugLog.log("RECEIVED from " + ctx.get().getPlayer().getUUID()); - request.processRequest(tag, Objects.requireNonNull(ctx.get().getPlayer()).level(), ctx.get().getPlayer()); - if (ctx.get().getPlayer() instanceof ServerPlayer player) - PacketHandler.sendToClient(new ResponsePacket(id, request), player); + ctx.get().getPlayer().level().getServer().submit(() -> request.processRequest(tag, Objects.requireNonNull(ctx.get().getPlayer()).level(), ctx.get().getPlayer())).join(); + if (ctx.get().getPlayer() instanceof ServerPlayer player) { + PacketHandler.sendToClient(new ResponsePacket(id, request), player); + } return true; } diff --git a/common/src/main/java/com/ultreon/devices/network/task/ResponsePacket.java b/common/src/main/java/dev/ultreon/devices/network/task/ResponsePacket.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/network/task/ResponsePacket.java rename to common/src/main/java/dev/ultreon/devices/network/task/ResponsePacket.java index 32d016260..c0afe5f65 100644 --- a/common/src/main/java/com/ultreon/devices/network/task/ResponsePacket.java +++ b/common/src/main/java/dev/ultreon/devices/network/task/ResponsePacket.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.network.task; +package dev.ultreon.devices.network.task; -import com.ultreon.devices.api.task.Task; -import com.ultreon.devices.api.task.TaskManager; -import com.ultreon.devices.network.Packet; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.api.task.Task; +import dev.ultreon.devices.api.task.TaskManager; +import dev.ultreon.devices.network.Packet; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; @@ -31,7 +31,7 @@ public ResponsePacket(int id, Task request) { @Override public void toBytes(FriendlyByteBuf buf) { buf.writeInt(this.id); - buf.writeBoolean(this.request.isSucessful()); + buf.writeBoolean(this.request.isSuccessful()); buf.writeUtf(this.request.getName()); CompoundTag tag = new CompoundTag(); this.request.prepareResponse(tag); diff --git a/common/src/main/java/com/ultreon/devices/network/task/SyncApplicationPacket.java b/common/src/main/java/dev/ultreon/devices/network/task/SyncApplicationPacket.java similarity index 78% rename from common/src/main/java/com/ultreon/devices/network/task/SyncApplicationPacket.java rename to common/src/main/java/dev/ultreon/devices/network/task/SyncApplicationPacket.java index dc01232c9..1c5f9c8ea 100644 --- a/common/src/main/java/com/ultreon/devices/network/task/SyncApplicationPacket.java +++ b/common/src/main/java/dev/ultreon/devices/network/task/SyncApplicationPacket.java @@ -1,11 +1,11 @@ -package com.ultreon.devices.network.task; +package dev.ultreon.devices.network.task; import com.google.common.collect.ImmutableList; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.network.Packet; -import com.ultreon.devices.object.AppInfo; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.network.Packet; +import dev.ultreon.devices.object.AppInfo; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; @@ -27,7 +27,7 @@ public SyncApplicationPacket(FriendlyByteBuf buf) { if (info != null) { builder.add(info); } else { - Devices.LOGGER.error("Missing application '" + appId + "'"); + UltreonDevicesMod.LOGGER.error("Missing application '" + appId + "'"); } } @@ -48,7 +48,7 @@ public void toBytes(FriendlyByteBuf buf) { @Override public boolean onMessage(Supplier ctx) { - Devices.setAllowedApps(allowedApps); + UltreonDevicesMod.setAllowedApps(allowedApps); return true; } } diff --git a/common/src/main/java/com/ultreon/devices/network/task/SyncBlockPacket.java b/common/src/main/java/dev/ultreon/devices/network/task/SyncBlockPacket.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/network/task/SyncBlockPacket.java rename to common/src/main/java/dev/ultreon/devices/network/task/SyncBlockPacket.java index fa285ff8d..4a5bf2a54 100644 --- a/common/src/main/java/com/ultreon/devices/network/task/SyncBlockPacket.java +++ b/common/src/main/java/dev/ultreon/devices/network/task/SyncBlockPacket.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.network.task; +package dev.ultreon.devices.network.task; -import com.ultreon.devices.block.entity.RouterBlockEntity; -import com.ultreon.devices.network.Packet; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.block.entity.RouterBlockEntity; +import dev.ultreon.devices.network.Packet; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/network/task/SyncConfigPacket.java b/common/src/main/java/dev/ultreon/devices/network/task/SyncConfigPacket.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/network/task/SyncConfigPacket.java rename to common/src/main/java/dev/ultreon/devices/network/task/SyncConfigPacket.java index ab025bcb6..7790184b3 100644 --- a/common/src/main/java/com/ultreon/devices/network/task/SyncConfigPacket.java +++ b/common/src/main/java/dev/ultreon/devices/network/task/SyncConfigPacket.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.network.task; +package dev.ultreon.devices.network.task; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.network.Packet; import dev.architectury.networking.NetworkManager; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.network.Packet; import net.minecraft.network.FriendlyByteBuf; import java.util.Objects; diff --git a/common/src/main/java/com/ultreon/devices/object/AppInfo.java b/common/src/main/java/dev/ultreon/devices/object/AppInfo.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/object/AppInfo.java rename to common/src/main/java/dev/ultreon/devices/object/AppInfo.java index a9b085d80..401e570c2 100644 --- a/common/src/main/java/com/ultreon/devices/object/AppInfo.java +++ b/common/src/main/java/dev/ultreon/devices/object/AppInfo.java @@ -1,23 +1,20 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; import com.google.gson.*; import com.google.gson.reflect.TypeToken; -import com.ultreon.devices.Devices; -import com.ultreon.devices.Reference; -import com.ultreon.devices.core.Laptop; -import dev.architectury.injectables.annotations.PlatformOnly; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.client.Display; +import dev.ultreon.devices.mineos.client.MineOS; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.language.I18n; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.Resource; -import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import java.awt.*; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Type; import java.util.ArrayList; @@ -39,8 +36,8 @@ public class AppInfo { @Override public int getTintColor(AppInfo info, int o) { return switch (o) { - case 1 -> Laptop.getSystem().getSettings().getColorScheme().getBackgroundColor(); - case 2 -> Laptop.getSystem().getSettings().getColorScheme().getBackgroundSecondaryColor(); + case 1 -> ((MineOS) Display.get().getOS()).getSettings().getColorScheme().getBackgroundColor(); + case 2 -> ((MineOS) Display.get().getOS()).getSettings().getColorScheme().getBackgroundSecondaryColor(); default -> new Color(255, 255, 255).getRGB(); }; } @@ -300,7 +297,7 @@ public AppInfo deserialize(JsonElement json, Type typeOfT, JsonDeserializationCo default -> throw new RuntimeException("Schema " + getSchemaVersion(json) + " is not implemented in " + Reference.VERSION + "!"); } } catch (JsonParseException e) { - Devices.LOGGER.error("Malformed app info json for '" + info.getFormattedId() + "'"); + UltreonDevicesMod.LOGGER.error("Malformed app info json for '" + info.getFormattedId() + "'"); } return info; @@ -327,7 +324,7 @@ private void deserializeSchemaVersion0(JsonElement json, JsonDeserializationCont info.icon.overlay1.type = 2; } - if (json.getAsJsonObject().has("support") && json.getAsJsonObject().get("support").getAsJsonObject().size() > 0) { + if (json.getAsJsonObject().has("support") && !json.getAsJsonObject().get("support").getAsJsonObject().isEmpty()) { JsonObject supportObj = json.getAsJsonObject().get("support").getAsJsonObject(); Support support = new Support(); @@ -359,10 +356,10 @@ private void deserializeSchemaVersion1(JsonElement json, JsonDeserializationCont } if (json.getAsJsonObject().has("icon") && json.getAsJsonObject().get("icon").isJsonPrimitive()) { - Devices.LOGGER.warn("{} uses removed \"icon\"! Please advise {} to fix the icon!", info.name, info.authors[0]); + UltreonDevicesMod.LOGGER.warn("{} uses removed \"icon\"! Please advise {} to fix the icon!", info.name, info.authors[0]); } - if (json.getAsJsonObject().has("support") && json.getAsJsonObject().get("support").getAsJsonObject().size() > 0) { + if (json.getAsJsonObject().has("support") && !json.getAsJsonObject().get("support").getAsJsonObject().isEmpty()) { JsonObject supportObj = json.getAsJsonObject().get("support").getAsJsonObject(); Support support = new Support(); @@ -407,7 +404,7 @@ private void deserializeSchemaVersion2(JsonElement json, JsonDeserializationCont if (json.getAsJsonObject().has("author") && json.getAsJsonObject().get("author").isJsonPrimitive()) { if (info.authors == null) { info.authors = new String[]{convertToLocal(json.getAsJsonObject().get("author").getAsString())}; - Devices.LOGGER.warn("{} uses deprecated \"author\"!, Please advise {} to replace \"author\": \"{}\" with the \"authors\": [] format", info.name, info.authors[0], info.authors[0]); + UltreonDevicesMod.LOGGER.warn("{} uses deprecated \"author\"!, Please advise {} to replace \"author\": \"{}\" with the \"authors\": [] format", info.name, info.authors[0], info.authors[0]); } } @@ -419,14 +416,14 @@ private void deserializeSchemaVersion2(JsonElement json, JsonDeserializationCont } if (json.getAsJsonObject().has("icon") && json.getAsJsonObject().get("icon").isJsonPrimitive()) { - Devices.LOGGER.warn("{} uses removed \"icon\"! Please advise {} to fix the icon!", info.name, info.authors[0]); + UltreonDevicesMod.LOGGER.warn("{} uses removed \"icon\"! Please advise {} to fix the icon!", info.name, info.authors[0]); } if (d) info.authors = new String[0]; var l = new ArrayList(List.of(info.authors));l.addAll(contributors); info.contributors = l.toArray(new String[0]); - if (json.getAsJsonObject().has("support") && json.getAsJsonObject().get("support").getAsJsonObject().size() > 0) { + if (json.getAsJsonObject().has("support") && !json.getAsJsonObject().get("support").getAsJsonObject().isEmpty()) { JsonObject supportObj = json.getAsJsonObject().get("support").getAsJsonObject(); Support support = new Support(); @@ -476,7 +473,7 @@ private void deserializeSchemaVersion3(JsonElement json, JsonDeserializationCont var l = new ArrayList(List.of(info.authors));l.addAll(contributors); info.contributors = l.toArray(new String[0]); - if (json.getAsJsonObject().has("support") && json.getAsJsonObject().get("support").getAsJsonObject().size() > 0) { + if (json.getAsJsonObject().has("support") && !json.getAsJsonObject().get("support").getAsJsonObject().isEmpty()) { JsonObject supportObj = json.getAsJsonObject().get("support").getAsJsonObject(); Support support = new Support(); diff --git a/common/src/main/java/com/ultreon/devices/object/Canvas.java b/common/src/main/java/dev/ultreon/devices/object/Canvas.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/object/Canvas.java rename to common/src/main/java/dev/ultreon/devices/object/Canvas.java index 4fd529963..df152db4a 100644 --- a/common/src/main/java/com/ultreon/devices/object/Canvas.java +++ b/common/src/main/java/dev/ultreon/devices/object/Canvas.java @@ -1,14 +1,13 @@ -package com.ultreon.devices.object; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.tools.ToolBucket; -import com.ultreon.devices.object.tools.ToolEraser; -import com.ultreon.devices.object.tools.ToolEyeDropper; -import com.ultreon.devices.object.tools.ToolPencil; -import com.ultreon.devices.util.GuiHelper; +package dev.ultreon.devices.object; + +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.tools.ToolBucket; +import dev.ultreon.devices.object.tools.ToolEraser; +import dev.ultreon.devices.object.tools.ToolEyeDropper; +import dev.ultreon.devices.object.tools.ToolPencil; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -51,7 +50,7 @@ public void init(Layout layout) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { graphics.fill(xPosition, yPosition, xPosition + picture.getWidth() * picture.getPixelWidth() + 2, yPosition + picture.getHeight() * picture.getPixelHeight() + 2, Color.DARK_GRAY.getRGB()); graphics.fill(xPosition + 1, yPosition + 1, xPosition + picture.getWidth() * picture.getPixelWidth() + 1, yPosition + picture.getHeight() * picture.getPixelHeight() + 1, Color.WHITE.getRGB()); for (int i = 0; i < picture.getHeight(); i++) { diff --git a/common/src/main/java/com/ultreon/devices/object/ColorGrid.java b/common/src/main/java/dev/ultreon/devices/object/ColorGrid.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/object/ColorGrid.java rename to common/src/main/java/dev/ultreon/devices/object/ColorGrid.java index ea22a44b5..80e85390d 100644 --- a/common/src/main/java/com/ultreon/devices/object/ColorGrid.java +++ b/common/src/main/java/dev/ultreon/devices/object/ColorGrid.java @@ -1,10 +1,9 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.component.Slider; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.component.Slider; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -15,7 +14,7 @@ public class ColorGrid extends Component { private final int hoverColor = new Color(255, 255, 255, 100).getRGB(); - private final com.ultreon.devices.object.Canvas canvas; + private final dev.ultreon.devices.object.Canvas canvas; private final Slider redSlider; private final Slider greenSlider; private final Slider blueSlider; @@ -32,7 +31,7 @@ public ColorGrid(int left, int top, int width, Canvas canvas, Slider redSlider, } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { int endX = xPosition + width + 2; int endY = yPosition + (colors.length / 5) * 10 + 2; graphics.fill(xPosition, yPosition, endX, endY, Color.DARK_GRAY.getRGB()); diff --git a/common/src/main/java/com/ultreon/devices/object/Game.java b/common/src/main/java/dev/ultreon/devices/object/Game.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/object/Game.java rename to common/src/main/java/dev/ultreon/devices/object/Game.java index 350237bd1..335df7765 100644 --- a/common/src/main/java/com/ultreon/devices/object/Game.java +++ b/common/src/main/java/dev/ultreon/devices/object/Game.java @@ -1,13 +1,13 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.exception.WorldLessException; -import com.ultreon.devices.object.tiles.Tile; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.client.Display; +import dev.ultreon.devices.exception.WorldLessException; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.tiles.Tile; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; @@ -36,7 +36,7 @@ public class Game extends Component { public Game(int left, int top, int mapWidth, int mapHeight) throws Exception { super(left, top); - if (Laptop.isWorldLess()) throw new WorldLessException("The game can only exist if the universe exists."); + if (Display.get().getOS().isWorldLess()) throw new WorldLessException("The game can only exist if the universe exists."); if (mapWidth % Tile.WIDTH != 0 || mapHeight % Tile.HEIGHT != 0) throw new Exception("Width and height need to be a multiple of " + Tile.WIDTH); @@ -51,7 +51,7 @@ public static void registerTile(int id, Tile tile) { registeredTiles.put(id, tile); } - public static Map getRegisteredtiles() { + public static Map getRegisteredTiles() { return registeredTiles; } @@ -116,7 +116,7 @@ public void handleMouseDrag(int mouseX, int mouseY, int mouseButton) { } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { //long start = System.currentTimeMillis(); if (editorMode) { diff --git a/common/src/main/java/com/ultreon/devices/object/Picture.java b/common/src/main/java/dev/ultreon/devices/object/Picture.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/object/Picture.java rename to common/src/main/java/dev/ultreon/devices/object/Picture.java index 721da3ba4..ffda32ea5 100644 --- a/common/src/main/java/com/ultreon/devices/object/Picture.java +++ b/common/src/main/java/dev/ultreon/devices/object/Picture.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; -import com.ultreon.devices.api.io.File; +import dev.ultreon.devices.api.io.File; import net.minecraft.nbt.CompoundTag; import java.awt.*; diff --git a/common/src/main/java/com/ultreon/devices/object/Player.java b/common/src/main/java/dev/ultreon/devices/object/Player.java similarity index 96% rename from common/src/main/java/com/ultreon/devices/object/Player.java rename to common/src/main/java/dev/ultreon/devices/object/Player.java index 359e4f603..1f1cd60f4 100644 --- a/common/src/main/java/com/ultreon/devices/object/Player.java +++ b/common/src/main/java/dev/ultreon/devices/object/Player.java @@ -1,19 +1,19 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.tiles.Tile; -import com.ultreon.devices.util.KeyboardHelper; -import com.ultreon.devices.util.Vec2d; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.tiles.Tile; +import dev.ultreon.devices.util.KeyboardHelper; +import dev.ultreon.devices.util.Vec2d; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.BoatRenderer; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.resources.PlayerSkin; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.vehicle.Boat; import org.joml.Quaternionf; @@ -49,8 +49,8 @@ public Player(Game game) { this.velocity = new Vec2d(0, 0); this.boatModel = new BoatRenderer(createEntityRendererContext(), false); assert Minecraft.getInstance().player != null; - boolean slim = Minecraft.getInstance().player.getModelName().equals("slim"); - if (!Laptop.isWorldLess()) { + boolean slim = Minecraft.getInstance().player.getSkin().model() == PlayerSkin.Model.SLIM; + if (!MineOS.getOpened().isWorldLess()) { boat = new Boat(Objects.requireNonNull(Minecraft.getInstance().level), 0, 0, 0); } // this.playerModel = new ModelDummyPlayer(0f, slim); diff --git a/common/src/main/java/com/ultreon/devices/object/TileGrid.java b/common/src/main/java/dev/ultreon/devices/object/TileGrid.java similarity index 85% rename from common/src/main/java/com/ultreon/devices/object/TileGrid.java rename to common/src/main/java/dev/ultreon/devices/object/TileGrid.java index 62cf0d33b..9692dec00 100644 --- a/common/src/main/java/com/ultreon/devices/object/TileGrid.java +++ b/common/src/main/java/dev/ultreon/devices/object/TileGrid.java @@ -1,18 +1,17 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; -import com.ultreon.devices.api.app.Component; -import com.ultreon.devices.api.app.Icons; -import com.ultreon.devices.api.app.Layout; -import com.ultreon.devices.api.app.component.Button; -import com.ultreon.devices.api.app.component.Label; -import com.ultreon.devices.api.app.listener.ClickListener; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.object.tiles.Tile; -import com.ultreon.devices.util.GuiHelper; +import dev.ultreon.devices.api.app.Component; +import dev.ultreon.devices.api.app.Icons; +import dev.ultreon.devices.api.app.Layout; +import dev.ultreon.devices.api.app.component.Button; +import dev.ultreon.devices.api.app.component.Label; +import dev.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.object.tiles.Tile; +import dev.ultreon.devices.util.GuiHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -80,7 +79,7 @@ public void onClick(int mouseX, int mouseY, int mouseButton) } @Override - public void render(GuiGraphics graphics, Laptop laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) + public void render(GuiGraphics graphics, MineOS laptop, Minecraft mc, int x, int y, int mouseX, int mouseY, boolean windowActive, float partialTicks) { try { Tesselator.getInstance().getBuilder().end(); @@ -143,7 +142,7 @@ public void updateTiles() Tile.Category category = Tile.Category.values()[currentCategory]; labelCurrentCategory.setText(category.name); - for(Tile tile : Game.getRegisteredtiles().values()) + for(Tile tile : Game.getRegisteredTiles().values()) { if(tile.getCategory() == category) { diff --git a/common/src/main/java/com/ultreon/devices/object/Tool.java b/common/src/main/java/dev/ultreon/devices/object/Tool.java similarity index 86% rename from common/src/main/java/com/ultreon/devices/object/Tool.java rename to common/src/main/java/dev/ultreon/devices/object/Tool.java index bfc44bfc1..f1368f1cc 100644 --- a/common/src/main/java/com/ultreon/devices/object/Tool.java +++ b/common/src/main/java/dev/ultreon/devices/object/Tool.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; public abstract class Tool { public abstract void handleClick(Canvas canvas, int x, int y); diff --git a/common/src/main/java/com/ultreon/devices/object/TrayItem.java b/common/src/main/java/dev/ultreon/devices/object/TrayItem.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/object/TrayItem.java rename to common/src/main/java/dev/ultreon/devices/object/TrayItem.java index d91539fd7..459fb6c0b 100644 --- a/common/src/main/java/com/ultreon/devices/object/TrayItem.java +++ b/common/src/main/java/dev/ultreon/devices/object/TrayItem.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.object; +package dev.ultreon.devices.object; -import com.ultreon.devices.api.app.IIcon; -import com.ultreon.devices.api.app.listener.ClickListener; +import dev.ultreon.devices.api.app.IIcon; +import dev.ultreon.devices.api.app.listener.ClickListener; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; diff --git a/common/src/main/java/com/ultreon/devices/object/tiles/Tile.java b/common/src/main/java/dev/ultreon/devices/object/tiles/Tile.java similarity index 96% rename from common/src/main/java/com/ultreon/devices/object/tiles/Tile.java rename to common/src/main/java/dev/ultreon/devices/object/tiles/Tile.java index a30ba6f15..5e9253e97 100644 --- a/common/src/main/java/com/ultreon/devices/object/tiles/Tile.java +++ b/common/src/main/java/dev/ultreon/devices/object/tiles/Tile.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.object.tiles; +package dev.ultreon.devices.object.tiles; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.Game; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.object.Game; import net.minecraft.client.gui.GuiGraphics; public class Tile diff --git a/common/src/main/java/com/ultreon/devices/object/tiles/TileBlock.java b/common/src/main/java/dev/ultreon/devices/object/tiles/TileBlock.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/object/tiles/TileBlock.java rename to common/src/main/java/dev/ultreon/devices/object/tiles/TileBlock.java index 18244f897..73f8dd48f 100644 --- a/common/src/main/java/com/ultreon/devices/object/tiles/TileBlock.java +++ b/common/src/main/java/dev/ultreon/devices/object/tiles/TileBlock.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.object.tiles; +package dev.ultreon.devices.object.tiles; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.Game; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.object.Game; import net.minecraft.client.gui.GuiGraphics; public class TileBlock extends Tile diff --git a/common/src/main/java/com/ultreon/devices/object/tiles/TileCactus.java b/common/src/main/java/dev/ultreon/devices/object/tiles/TileCactus.java similarity index 89% rename from common/src/main/java/com/ultreon/devices/object/tiles/TileCactus.java rename to common/src/main/java/dev/ultreon/devices/object/tiles/TileCactus.java index 7e0b73a7e..2ad2bc23e 100644 --- a/common/src/main/java/com/ultreon/devices/object/tiles/TileCactus.java +++ b/common/src/main/java/dev/ultreon/devices/object/tiles/TileCactus.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.object.tiles; +package dev.ultreon.devices.object.tiles; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.Game; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.object.Game; import net.minecraft.client.gui.GuiGraphics; public class TileCactus extends Tile diff --git a/common/src/main/java/com/ultreon/devices/object/tiles/TileEnchantmentTable.java b/common/src/main/java/dev/ultreon/devices/object/tiles/TileEnchantmentTable.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/object/tiles/TileEnchantmentTable.java rename to common/src/main/java/dev/ultreon/devices/object/tiles/TileEnchantmentTable.java index bee5dc786..c8bb88b30 100644 --- a/common/src/main/java/com/ultreon/devices/object/tiles/TileEnchantmentTable.java +++ b/common/src/main/java/dev/ultreon/devices/object/tiles/TileEnchantmentTable.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.object.tiles; +package dev.ultreon.devices.object.tiles; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.Game; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.object.Game; import net.minecraft.client.gui.GuiGraphics; public class TileEnchantmentTable extends Tile diff --git a/common/src/main/java/com/ultreon/devices/object/tiles/TileFlower.java b/common/src/main/java/dev/ultreon/devices/object/tiles/TileFlower.java similarity index 79% rename from common/src/main/java/com/ultreon/devices/object/tiles/TileFlower.java rename to common/src/main/java/dev/ultreon/devices/object/tiles/TileFlower.java index 44a4f3ecd..8227887b7 100644 --- a/common/src/main/java/com/ultreon/devices/object/tiles/TileFlower.java +++ b/common/src/main/java/dev/ultreon/devices/object/tiles/TileFlower.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.object.tiles; +package dev.ultreon.devices.object.tiles; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.Game; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.object.Game; import net.minecraft.client.gui.GuiGraphics; public class TileFlower extends Tile diff --git a/common/src/main/java/com/ultreon/devices/object/tiles/TileGrass.java b/common/src/main/java/dev/ultreon/devices/object/tiles/TileGrass.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/object/tiles/TileGrass.java rename to common/src/main/java/dev/ultreon/devices/object/tiles/TileGrass.java index da8cbe148..f9637ab31 100644 --- a/common/src/main/java/com/ultreon/devices/object/tiles/TileGrass.java +++ b/common/src/main/java/dev/ultreon/devices/object/tiles/TileGrass.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.object.tiles; +package dev.ultreon.devices.object.tiles; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.Game; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.object.Game; import net.minecraft.client.gui.GuiGraphics; public class TileGrass extends Tile diff --git a/common/src/main/java/com/ultreon/devices/object/tiles/TileWheat.java b/common/src/main/java/dev/ultreon/devices/object/tiles/TileWheat.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/object/tiles/TileWheat.java rename to common/src/main/java/dev/ultreon/devices/object/tiles/TileWheat.java index a2aa82e92..021d6855c 100644 --- a/common/src/main/java/com/ultreon/devices/object/tiles/TileWheat.java +++ b/common/src/main/java/dev/ultreon/devices/object/tiles/TileWheat.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.object.tiles; +package dev.ultreon.devices.object.tiles; import com.mojang.blaze3d.vertex.PoseStack; -import com.ultreon.devices.api.utils.RenderUtil; -import com.ultreon.devices.object.Game; +import dev.ultreon.devices.api.utils.RenderUtil; +import dev.ultreon.devices.object.Game; import net.minecraft.client.gui.GuiGraphics; public class TileWheat extends Tile diff --git a/common/src/main/java/com/ultreon/devices/object/tools/ToolBucket.java b/common/src/main/java/dev/ultreon/devices/object/tools/ToolBucket.java similarity index 88% rename from common/src/main/java/com/ultreon/devices/object/tools/ToolBucket.java rename to common/src/main/java/dev/ultreon/devices/object/tools/ToolBucket.java index 1571351ba..6f813d407 100644 --- a/common/src/main/java/com/ultreon/devices/object/tools/ToolBucket.java +++ b/common/src/main/java/dev/ultreon/devices/object/tools/ToolBucket.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.object.tools; +package dev.ultreon.devices.object.tools; -import com.ultreon.devices.object.Canvas; -import com.ultreon.devices.object.Tool; +import dev.ultreon.devices.object.Canvas; +import dev.ultreon.devices.object.Tool; public class ToolBucket extends Tool { diff --git a/common/src/main/java/com/ultreon/devices/object/tools/ToolEraser.java b/common/src/main/java/dev/ultreon/devices/object/tools/ToolEraser.java similarity index 71% rename from common/src/main/java/com/ultreon/devices/object/tools/ToolEraser.java rename to common/src/main/java/dev/ultreon/devices/object/tools/ToolEraser.java index 8a814a0d1..7bde34e23 100644 --- a/common/src/main/java/com/ultreon/devices/object/tools/ToolEraser.java +++ b/common/src/main/java/dev/ultreon/devices/object/tools/ToolEraser.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.object.tools; +package dev.ultreon.devices.object.tools; -import com.ultreon.devices.object.Canvas; -import com.ultreon.devices.object.Tool; +import dev.ultreon.devices.object.Canvas; +import dev.ultreon.devices.object.Tool; public class ToolEraser extends Tool { diff --git a/common/src/main/java/com/ultreon/devices/object/tools/ToolEyeDropper.java b/common/src/main/java/dev/ultreon/devices/object/tools/ToolEyeDropper.java similarity index 71% rename from common/src/main/java/com/ultreon/devices/object/tools/ToolEyeDropper.java rename to common/src/main/java/dev/ultreon/devices/object/tools/ToolEyeDropper.java index 600915953..a0d083058 100644 --- a/common/src/main/java/com/ultreon/devices/object/tools/ToolEyeDropper.java +++ b/common/src/main/java/dev/ultreon/devices/object/tools/ToolEyeDropper.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.object.tools; +package dev.ultreon.devices.object.tools; -import com.ultreon.devices.object.Canvas; -import com.ultreon.devices.object.Tool; +import dev.ultreon.devices.object.Canvas; +import dev.ultreon.devices.object.Tool; public class ToolEyeDropper extends Tool { diff --git a/common/src/main/java/com/ultreon/devices/object/tools/ToolPencil.java b/common/src/main/java/dev/ultreon/devices/object/tools/ToolPencil.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/object/tools/ToolPencil.java rename to common/src/main/java/dev/ultreon/devices/object/tools/ToolPencil.java index 2f64480c2..8297a067b 100644 --- a/common/src/main/java/com/ultreon/devices/object/tools/ToolPencil.java +++ b/common/src/main/java/dev/ultreon/devices/object/tools/ToolPencil.java @@ -1,7 +1,7 @@ -package com.ultreon.devices.object.tools; +package dev.ultreon.devices.object.tools; -import com.ultreon.devices.object.Canvas; -import com.ultreon.devices.object.Tool; +import dev.ultreon.devices.object.Canvas; +import dev.ultreon.devices.object.Tool; public class ToolPencil extends Tool { diff --git a/common/src/main/java/com/ultreon/devices/util/ArchUtils.java b/common/src/main/java/dev/ultreon/devices/util/ArchUtils.java similarity index 65% rename from common/src/main/java/com/ultreon/devices/util/ArchUtils.java rename to common/src/main/java/dev/ultreon/devices/util/ArchUtils.java index 4be9e3d47..6aa8f0b3a 100644 --- a/common/src/main/java/com/ultreon/devices/util/ArchUtils.java +++ b/common/src/main/java/dev/ultreon/devices/util/ArchUtils.java @@ -1,6 +1,5 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; -import dev.architectury.injectables.annotations.ExpectPlatform; import dev.architectury.platform.Platform; public class ArchUtils { diff --git a/common/src/main/java/com/ultreon/devices/util/BlockEntityUtil.java b/common/src/main/java/dev/ultreon/devices/util/BlockEntityUtil.java similarity index 90% rename from common/src/main/java/com/ultreon/devices/util/BlockEntityUtil.java rename to common/src/main/java/dev/ultreon/devices/util/BlockEntityUtil.java index 83adf9db6..2313c21de 100644 --- a/common/src/main/java/com/ultreon/devices/util/BlockEntityUtil.java +++ b/common/src/main/java/dev/ultreon/devices/util/BlockEntityUtil.java @@ -1,7 +1,6 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.core.BlockPos; -import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; diff --git a/common/src/main/java/com/ultreon/devices/util/Colorable.java b/common/src/main/java/dev/ultreon/devices/util/Colorable.java similarity index 76% rename from common/src/main/java/com/ultreon/devices/util/Colorable.java rename to common/src/main/java/dev/ultreon/devices/util/Colorable.java index dd2caccad..2f5e5ba32 100644 --- a/common/src/main/java/com/ultreon/devices/util/Colorable.java +++ b/common/src/main/java/dev/ultreon/devices/util/Colorable.java @@ -1,8 +1,9 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.world.item.DyeColor; public interface Colorable extends Colored { + @Override DyeColor getColor(); void setColor(DyeColor color); diff --git a/common/src/main/java/com/ultreon/devices/util/Colored.java b/common/src/main/java/dev/ultreon/devices/util/Colored.java similarity index 74% rename from common/src/main/java/com/ultreon/devices/util/Colored.java rename to common/src/main/java/dev/ultreon/devices/util/Colored.java index 05ff145c0..3afda12ce 100644 --- a/common/src/main/java/com/ultreon/devices/util/Colored.java +++ b/common/src/main/java/dev/ultreon/devices/util/Colored.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.world.item.DyeColor; diff --git a/common/src/main/java/com/ultreon/devices/util/DataHandler.java b/common/src/main/java/dev/ultreon/devices/util/DataHandler.java similarity index 91% rename from common/src/main/java/com/ultreon/devices/util/DataHandler.java rename to common/src/main/java/dev/ultreon/devices/util/DataHandler.java index 729cc058e..1fc42dff7 100644 --- a/common/src/main/java/com/ultreon/devices/util/DataHandler.java +++ b/common/src/main/java/dev/ultreon/devices/util/DataHandler.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.nbt.CompoundTag; diff --git a/common/src/main/java/com/ultreon/devices/util/DyeableRegistration.java b/common/src/main/java/dev/ultreon/devices/util/DyeableRegistration.java similarity index 98% rename from common/src/main/java/com/ultreon/devices/util/DyeableRegistration.java rename to common/src/main/java/dev/ultreon/devices/util/DyeableRegistration.java index cc0830460..e3d2bcadf 100644 --- a/common/src/main/java/com/ultreon/devices/util/DyeableRegistration.java +++ b/common/src/main/java/dev/ultreon/devices/util/DyeableRegistration.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/common/src/main/java/dev/ultreon/devices/util/FrameBuffer.java b/common/src/main/java/dev/ultreon/devices/util/FrameBuffer.java new file mode 100644 index 000000000..ee6ba0efa --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/util/FrameBuffer.java @@ -0,0 +1,106 @@ +package dev.ultreon.devices.util; + +import com.mojang.blaze3d.platform.NativeImage; +import com.mojang.blaze3d.platform.Window; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.resources.ResourceLocation; + +import static org.lwjgl.opengl.ARBInternalformatQuery2.GL_TEXTURE_2D; +import static org.lwjgl.opengl.EXTFramebufferObject.*; +import static org.lwjgl.opengl.GL30.*; + +public class FrameBuffer { + private final FrameBufferTexture texture; + private final int texId; + private final int id; + private final Window window; + private final TextureManager textureMgr; + private int width; + private int height; + + public FrameBuffer(ResourceLocation location, int width, int height) { + this.texture = new FrameBufferTexture(location, width, height); + this.texture.upload(); + this.texId = this.texture.getId(); + + this.texture.bind(); + + this.width = width; + this.height = height; + + this.window = Minecraft.getInstance().getWindow(); + this.textureMgr = Minecraft.getInstance().getTextureManager(); + + this.id = glGenFramebuffersEXT(); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id); + glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + GL_TEXTURE_2D, texture.getId(), 0); + + int result = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); + if (result != GL_FRAMEBUFFER_COMPLETE) { + glBindFramebufferEXT(GL_FRAMEBUFFER, 0); + glDeleteFramebuffers(id); + + throw new RuntimeException("Failed to create frame buffer: " + result); + } + + glBindFramebufferEXT(GL_FRAMEBUFFER, 0); + + this.textureMgr.register(this.texture.getLocation(), this.texture); + } + + public static boolean isSupported() { + return glCheckFramebufferStatusEXT(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE; + } + + public FrameBufferTexture getTexture() { + return texture; + } + + public int getTexId() { + return texId; + } + + public void blit(GuiGraphics graphics, int x, int y, int width, int height) { + NativeImage pixels = this.texture.getPixels(); + graphics.blit(this.texture.getLocation(), x, y, width, height, pixels.getWidth(), pixels.getHeight()); + } + + public void dispose() { + this.textureMgr.release(this.texture.getLocation()); + } + + public void upload() { + this.texture.upload(); + } + + public void begin() { + glViewport(0, 0, width, height); + glBindFramebufferEXT(GL_FRAMEBUFFER, id); + } + + public void end() { + glBindFramebufferEXT(GL_FRAMEBUFFER, 0); + glViewport(0, 0, window.getWidth(), window.getHeight()); + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public int getId() { + return id; + } + + public void resize(int width, int height) { + this.width = width; + this.height = height; + this.texture.resize(width, height); + } +} diff --git a/common/src/main/java/dev/ultreon/devices/util/FrameBufferTexture.java b/common/src/main/java/dev/ultreon/devices/util/FrameBufferTexture.java new file mode 100644 index 000000000..0be42b57a --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/util/FrameBufferTexture.java @@ -0,0 +1,41 @@ +package dev.ultreon.devices.util; + +import com.mojang.blaze3d.platform.NativeImage; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + +public class FrameBufferTexture extends DynamicTexture { + private final ResourceLocation location; + + public FrameBufferTexture(ResourceLocation location, int width, int height) { + super(width, height, true); + + this.location = location; + } + + public ResourceLocation getLocation() { + return location; + } + + public void resize(int width, int height) { + NativeImage nativeImage = new NativeImage(width, height, true); + NativeImage pixels = this.getPixels(); + if (pixels != null) { + nativeImage.copyFrom(pixels); + } + this.setPixels(nativeImage); + } + + @Override + public void setPixels(@NotNull NativeImage pixels) { + super.setPixels(pixels); + } + + @Override + public @NotNull NativeImage getPixels() { + return Objects.requireNonNull(super.getPixels()); + } +} diff --git a/common/src/main/java/com/ultreon/devices/util/GLHelper.java b/common/src/main/java/dev/ultreon/devices/util/GLHelper.java similarity index 80% rename from common/src/main/java/com/ultreon/devices/util/GLHelper.java rename to common/src/main/java/dev/ultreon/devices/util/GLHelper.java index 028175d06..8f1d10d4f 100644 --- a/common/src/main/java/com/ultreon/devices/util/GLHelper.java +++ b/common/src/main/java/dev/ultreon/devices/util/GLHelper.java @@ -1,8 +1,10 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import org.joml.Vector3f; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; @@ -15,9 +17,18 @@ */ public class GLHelper { public static Stack scissorStack = new Stack<>(); + private static final Vector3f tmp = new Vector3f(); - public static void pushScissor(int x, int y, int width, int height) { - if (scissorStack.size() > 0) { + public static boolean pushScissor(GuiGraphics graphics, int x, int y, int width, int height) { + if (width <= 0 || height <= 0) { + return false; + } + + Vector3f translation = graphics.pose().last().pose().getTranslation(tmp); + x += (int) translation.x(); + y += (int) translation.y(); + + if (!scissorStack.isEmpty()) { Scissor scissor = scissorStack.peek(); x = Math.max(scissor.x, x); y = Math.max(scissor.y, y); @@ -32,6 +43,7 @@ public static void pushScissor(int x, int y, int width, int height) { double scale = resolution.getScaleFactor(); GlStateManager._scissorBox((int) (x * scale), (int) (mc.getWindow().getHeight() - y * scale - height * scale), (int) Math.max(0, width * scale), (int) Math.max(0, height * scale)); scissorStack.push(new Scissor(x, y, width, height)); + return true; } public static void popScissor() { @@ -59,9 +71,13 @@ public static boolean isScissorStackEmpty() { /** * Do not call! Used for core only. + * + * @return true if the scissor stack was cleared */ - public static void clearScissorStack() { + public static boolean clearScissorStack() { + if (scissorStack.isEmpty()) return false; scissorStack.clear(); + return true; } public static Color getPixel(int x, int y) { diff --git a/common/src/main/java/com/ultreon/devices/util/GuiHelper.java b/common/src/main/java/dev/ultreon/devices/util/GuiHelper.java similarity index 92% rename from common/src/main/java/com/ultreon/devices/util/GuiHelper.java rename to common/src/main/java/dev/ultreon/devices/util/GuiHelper.java index 133ec4484..7c71e1fc1 100644 --- a/common/src/main/java/com/ultreon/devices/util/GuiHelper.java +++ b/common/src/main/java/dev/ultreon/devices/util/GuiHelper.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; public class GuiHelper { public static boolean isMouseInside(int mouseX, int mouseY, int x1, int y1, int x2, int y2) { diff --git a/common/src/main/java/com/ultreon/devices/util/InventoryUtil.java b/common/src/main/java/dev/ultreon/devices/util/InventoryUtil.java similarity index 98% rename from common/src/main/java/com/ultreon/devices/util/InventoryUtil.java rename to common/src/main/java/dev/ultreon/devices/util/InventoryUtil.java index afee7450a..1885a128a 100644 --- a/common/src/main/java/com/ultreon/devices/util/InventoryUtil.java +++ b/common/src/main/java/dev/ultreon/devices/util/InventoryUtil.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; diff --git a/common/src/main/java/com/ultreon/devices/util/ItemColors.java b/common/src/main/java/dev/ultreon/devices/util/ItemColors.java similarity index 99% rename from common/src/main/java/com/ultreon/devices/util/ItemColors.java rename to common/src/main/java/dev/ultreon/devices/util/ItemColors.java index d37fe74a4..d6b684ed4 100644 --- a/common/src/main/java/com/ultreon/devices/util/ItemColors.java +++ b/common/src/main/java/dev/ultreon/devices/util/ItemColors.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Items; diff --git a/common/src/main/java/com/ultreon/devices/util/KeyboardHelper.java b/common/src/main/java/dev/ultreon/devices/util/KeyboardHelper.java similarity index 96% rename from common/src/main/java/com/ultreon/devices/util/KeyboardHelper.java rename to common/src/main/java/dev/ultreon/devices/util/KeyboardHelper.java index 5a15d9ad7..29d3dc9dc 100644 --- a/common/src/main/java/com/ultreon/devices/util/KeyboardHelper.java +++ b/common/src/main/java/dev/ultreon/devices/util/KeyboardHelper.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.Minecraft; diff --git a/common/src/main/java/com/ultreon/devices/util/Mouse.java b/common/src/main/java/dev/ultreon/devices/util/Mouse.java similarity index 93% rename from common/src/main/java/com/ultreon/devices/util/Mouse.java rename to common/src/main/java/dev/ultreon/devices/util/Mouse.java index 03e44f1bf..36fe3e271 100644 --- a/common/src/main/java/com/ultreon/devices/util/Mouse.java +++ b/common/src/main/java/dev/ultreon/devices/util/Mouse.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.client.Minecraft; import org.lwjgl.glfw.GLFW; diff --git a/common/src/main/java/com/ultreon/devices/util/ObjectUtils.java b/common/src/main/java/dev/ultreon/devices/util/ObjectUtils.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/util/ObjectUtils.java rename to common/src/main/java/dev/ultreon/devices/util/ObjectUtils.java index a4752aa85..978a065b4 100644 --- a/common/src/main/java/com/ultreon/devices/util/ObjectUtils.java +++ b/common/src/main/java/dev/ultreon/devices/util/ObjectUtils.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/com/ultreon/devices/util/ScaledResolution.java b/common/src/main/java/dev/ultreon/devices/util/ScaledResolution.java similarity index 96% rename from common/src/main/java/com/ultreon/devices/util/ScaledResolution.java rename to common/src/main/java/dev/ultreon/devices/util/ScaledResolution.java index d830d0c06..07129a1fd 100644 --- a/common/src/main/java/com/ultreon/devices/util/ScaledResolution.java +++ b/common/src/main/java/dev/ultreon/devices/util/ScaledResolution.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import net.minecraft.client.Minecraft; diff --git a/common/src/main/java/com/ultreon/devices/util/SeatUtil.java b/common/src/main/java/dev/ultreon/devices/util/SeatUtil.java similarity index 84% rename from common/src/main/java/com/ultreon/devices/util/SeatUtil.java rename to common/src/main/java/dev/ultreon/devices/util/SeatUtil.java index 98ba1ba6a..596182d7f 100644 --- a/common/src/main/java/com/ultreon/devices/util/SeatUtil.java +++ b/common/src/main/java/dev/ultreon/devices/util/SeatUtil.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; -import com.ultreon.devices.debug.DebugLog; -import com.ultreon.devices.entity.SeatEntity; -import com.ultreon.devices.init.DeviceEntities; +import dev.ultreon.devices.debug.DebugLog; +import dev.ultreon.devices.entity.SeatEntity; +import dev.ultreon.devices.init.DeviceEntities; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/common/src/main/java/com/ultreon/devices/util/SiteRegistration.java b/common/src/main/java/dev/ultreon/devices/util/SiteRegistration.java similarity index 82% rename from common/src/main/java/com/ultreon/devices/util/SiteRegistration.java rename to common/src/main/java/dev/ultreon/devices/util/SiteRegistration.java index 9d9ea8f86..910177e5a 100644 --- a/common/src/main/java/com/ultreon/devices/util/SiteRegistration.java +++ b/common/src/main/java/dev/ultreon/devices/util/SiteRegistration.java @@ -1,14 +1,14 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; -import com.ultreon.devices.Devices; -import com.ultreon.devices.programs.gitweb.component.GitWebFrame; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.mineos.apps.gitweb.component.GitWebFrame; import org.slf4j.Marker; import org.slf4j.MarkerFactory; import java.util.Locale; import java.util.regex.Matcher; -import static com.ultreon.devices.util.SiteRegistration.Type.*; +import static dev.ultreon.devices.util.SiteRegistration.Type.*; public record SiteRegistration(String registrant, String string, Type type, String site) { private static final Marker MARKER = MarkerFactory.getMarker("SITE_REGISTER"); @@ -20,14 +20,14 @@ public SiteRegistration(String registrant, String string, String type, String si public static String getURL(String website) { Matcher matcher = GitWebFrame.PATTERN_LINK.matcher(website); if (!matcher.matches()) { - Devices.LOGGER.error("No Match Found For " + website + "!"); + UltreonDevicesMod.LOGGER.error("No Match Found For " + website + "!"); return "https://raw.githubusercontent.com/Ultreon/gitweb-sites/main/"; } String domain = matcher.group("domain"); String extension = matcher.group("extension"); String directory = matcher.group("directory"); var url = "https://raw.githubusercontent.com/Ultreon/gitweb-sites/main/"; - for (SiteRegistration siteRegistration : Devices.SITE_REGISTRATIONS) { + for (SiteRegistration siteRegistration : UltreonDevicesMod.SITE_REGISTRATIONS) { if (siteRegistration.type == ALL) { url = siteRegistration.site; } else if (siteRegistration.type == EXTENSION && siteRegistration.string.equals(extension)) { @@ -44,7 +44,7 @@ public static String getURL(String website) { } } } - Devices.LOGGER.info(MARKER, "Registered Sites: " + Devices.SITE_REGISTRATIONS.size() + ", " + "URL: " + url); + UltreonDevicesMod.LOGGER.info(MARKER, "Registered Sites: " + UltreonDevicesMod.SITE_REGISTRATIONS.size() + ", " + "URL: " + url); return url; } diff --git a/common/src/main/java/com/ultreon/devices/util/StreamUtils.java b/common/src/main/java/dev/ultreon/devices/util/StreamUtils.java similarity index 95% rename from common/src/main/java/com/ultreon/devices/util/StreamUtils.java rename to common/src/main/java/dev/ultreon/devices/util/StreamUtils.java index 79b3c67ae..24c9254dd 100644 --- a/common/src/main/java/com/ultreon/devices/util/StreamUtils.java +++ b/common/src/main/java/dev/ultreon/devices/util/StreamUtils.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; import java.io.*; import java.nio.charset.StandardCharsets; diff --git a/common/src/main/java/com/ultreon/devices/util/StringUtils.java b/common/src/main/java/dev/ultreon/devices/util/StringUtils.java similarity index 87% rename from common/src/main/java/com/ultreon/devices/util/StringUtils.java rename to common/src/main/java/dev/ultreon/devices/util/StringUtils.java index c5c5abca2..04df961fd 100644 --- a/common/src/main/java/com/ultreon/devices/util/StringUtils.java +++ b/common/src/main/java/dev/ultreon/devices/util/StringUtils.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; public class StringUtils { public static boolean isNullOrEmpty(String text) { diff --git a/common/src/main/java/com/ultreon/devices/util/Tickable.java b/common/src/main/java/dev/ultreon/devices/util/Tickable.java similarity index 58% rename from common/src/main/java/com/ultreon/devices/util/Tickable.java rename to common/src/main/java/dev/ultreon/devices/util/Tickable.java index 8ef2fa213..752730646 100644 --- a/common/src/main/java/com/ultreon/devices/util/Tickable.java +++ b/common/src/main/java/dev/ultreon/devices/util/Tickable.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; public interface Tickable { void tick(); diff --git a/common/src/main/java/com/ultreon/devices/util/TimeUtil.java b/common/src/main/java/dev/ultreon/devices/util/TimeUtil.java similarity index 97% rename from common/src/main/java/com/ultreon/devices/util/TimeUtil.java rename to common/src/main/java/dev/ultreon/devices/util/TimeUtil.java index e50fa627a..3f68c206b 100644 --- a/common/src/main/java/com/ultreon/devices/util/TimeUtil.java +++ b/common/src/main/java/dev/ultreon/devices/util/TimeUtil.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; public class TimeUtil { @SuppressWarnings("IntegerDivisionInFloatingPointContext") diff --git a/common/src/main/java/com/ultreon/devices/util/Vec2d.java b/common/src/main/java/dev/ultreon/devices/util/Vec2d.java similarity index 94% rename from common/src/main/java/com/ultreon/devices/util/Vec2d.java rename to common/src/main/java/dev/ultreon/devices/util/Vec2d.java index 09776a352..52dd532ab 100644 --- a/common/src/main/java/com/ultreon/devices/util/Vec2d.java +++ b/common/src/main/java/dev/ultreon/devices/util/Vec2d.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.util; +package dev.ultreon.devices.util; public class Vec2d { public double x, y; diff --git a/common/src/main/java/dev/ultreon/devices/util/VulnerabilityUtil.java b/common/src/main/java/dev/ultreon/devices/util/VulnerabilityUtil.java new file mode 100644 index 000000000..25541d33b --- /dev/null +++ b/common/src/main/java/dev/ultreon/devices/util/VulnerabilityUtil.java @@ -0,0 +1,61 @@ +package dev.ultreon.devices.util; + +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.jab125.version.Version; +import com.jab125.version.VersionPredicate; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.api.util.Vulnerability; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class VulnerabilityUtil { + public static List parseArray(JsonArray array) { + ArrayList arraylist = new ArrayList<>() { + @Override + public boolean add(@Nullable Vulnerability vulnerability) { + if (vulnerability != null) return super.add(vulnerability); + return false; + } + }; + for (JsonElement jsonElement : array) { + if (jsonElement.isJsonObject()) { + arraylist.add(parseObject(jsonElement.getAsJsonObject())); + } + } + return ImmutableList.copyOf(arraylist); + } + + public static Vulnerability parseObject(JsonObject array) { + boolean hasReporter = array.has("reporter"); + boolean hasDescription = array.has("description"); + boolean hasFixVersion = array.has("fixVersions"); + Collection affectedVersions = toStringList(array.getAsJsonArray("affectedVersions")); + var d = false; + for (VersionPredicate affectedVersion : affectedVersions) { + try { + d = affectedVersion.test(Version.parse(Reference.getVerInfo()[0])); + if (d) break; + } catch (Exception e){e.printStackTrace();} + } + return new Vulnerability(hasReporter ? array.get("reporter").getAsString() : null, array.get("title").getAsString(), hasDescription ? array.get("description").getAsString() : null, array.get("severity").getAsInt(), affectedVersions, !hasFixVersion ? new ArrayList<>() : toStringList(array.get("fixVersions").getAsJsonArray()), d); + } + + private static Collection toStringList(JsonArray array) { + ArrayList l = new ArrayList<>(); + for (JsonElement jsonElement : array) { + l.add(jsonElement.getAsString()); + } + try { + return VersionPredicate.parse(l); + } catch (Exception e) { + e.printStackTrace(); // oh no + return new ArrayList<>(); + } + } +} diff --git a/common/src/main/resources/META-INF/services/com.ultreon.mods.advanceddebug.api.extension.Extension b/common/src/main/resources/META-INF/services/com.ultreon.mods.advanceddebug.api.extension.Extension new file mode 100644 index 000000000..b5eea8429 --- /dev/null +++ b/common/src/main/resources/META-INF/services/com.ultreon.mods.advanceddebug.api.extension.Extension @@ -0,0 +1 @@ +com.ultreon.devices.compat.AdvancedDebugExt \ No newline at end of file diff --git a/common/src/main/resources/META-INF/services/dev.ultreon.devices.isolated.storage.DataStorage b/common/src/main/resources/META-INF/services/dev.ultreon.devices.isolated.storage.DataStorage new file mode 100644 index 000000000..ceaca7dd3 --- /dev/null +++ b/common/src/main/resources/META-INF/services/dev.ultreon.devices.isolated.storage.DataStorage @@ -0,0 +1,2 @@ +dev.ultreon.devices.impl.storage.ResourceStorage +dev.ultreon.devices.impl.storage.FileStorage \ No newline at end of file diff --git a/common/src/main/resources/assets/devices/apps/bank.json b/common/src/main/resources/assets/devices/apps/bank.json index ae0857474..d2ee194ad 100644 --- a/common/src/main/resources/assets/devices/apps/bank.json +++ b/common/src/main/resources/assets/devices/apps/bank.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "name": "Bank", - "authors": ["MrCrayfish", "Jab125", "Qboi123"], + "authors": ["MrCrayfish", "Jab125", "XyperCode"], "description": "${desc}", "version": "1.0", "screenshots": [ diff --git a/common/src/main/resources/assets/devices/apps/boat_racers.json b/common/src/main/resources/assets/devices/apps/boat_racers.json index 2b92126f4..ed4755328 100644 --- a/common/src/main/resources/assets/devices/apps/boat_racers.json +++ b/common/src/main/resources/assets/devices/apps/boat_racers.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "name": "Boat Racers", - "authors": ["MrCrayfish", "MinecraftDoodler", "Jab125", "Qboi123"], + "authors": ["MrCrayfish", "MinecraftDoodler", "Jab125", "XyperCode"], "description": "VERY VERY WIP", "version": "0.0.1", "screenshots": [ diff --git a/common/src/main/resources/assets/devices/apps/diagnostics.json b/common/src/main/resources/assets/devices/apps/diagnostics.json index 8ca9535f2..a4953adbb 100644 --- a/common/src/main/resources/assets/devices/apps/diagnostics.json +++ b/common/src/main/resources/assets/devices/apps/diagnostics.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "name": "App Diagnostics", - "authors": ["Qboi123"], + "authors": ["XyperCode"], "description": "", "version": "1.0", "screenshots": [ diff --git a/common/src/main/resources/assets/devices/apps/gitweb.json b/common/src/main/resources/assets/devices/apps/gitweb.json index 4c1a0bbf2..ce34af2e3 100644 --- a/common/src/main/resources/assets/devices/apps/gitweb.json +++ b/common/src/main/resources/assets/devices/apps/gitweb.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "name": "GitWeb", - "authors": ["MrCrayfish", "MinecraftDoodler", "Jab125", "Qboi123"], + "authors": ["MrCrayfish", "MinecraftDoodler", "Jab125", "XyperCode"], "description": "GitWeb is a web browser powered by GitHub. It is community driven, which means websites you browse are created by other players.", "version": "0.0.2", "screenshots": [ diff --git a/common/src/main/resources/assets/devices/apps/mine_bay.json b/common/src/main/resources/assets/devices/apps/mine_bay.json index 7003e8fc4..54226667a 100644 --- a/common/src/main/resources/assets/devices/apps/mine_bay.json +++ b/common/src/main/resources/assets/devices/apps/mine_bay.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "name": "MineBay", - "authors": ["MrCrayfish", "Jab125", "Qboi123"], + "authors": ["MrCrayfish", "Jab125", "XyperCode"], "description": "Just a description", "version": "1.0", "screenshots": [ diff --git a/common/src/main/resources/assets/devices/models/block/laptop_base.json b/common/src/main/resources/assets/devices/models/block/laptop_base.json index 5d8a23d05..d9cacfd08 100644 --- a/common/src/main/resources/assets/devices/models/block/laptop_base.json +++ b/common/src/main/resources/assets/devices/models/block/laptop_base.json @@ -1,11 +1,11 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", "textures": { - "particle": "block/anvil", + "particle": "devices:block/laptop2", "0": "devices:block/laptop1", "1": "devices:block/laptop2", "2": "block/red_wool", - "3": "devices:model/usb" + "3": "devices:block/usb" }, "elements": [ { diff --git a/common/src/main/resources/assets/devices/textures/model/usb.png b/common/src/main/resources/assets/devices/textures/block/usb.png similarity index 100% rename from common/src/main/resources/assets/devices/textures/model/usb.png rename to common/src/main/resources/assets/devices/textures/block/usb.png diff --git a/common/src/main/resources/assets/devices/textures/gui/laptop_wallpaper_11.png b/common/src/main/resources/assets/devices/textures/gui/laptop_wallpaper_11.png new file mode 100644 index 000000000..fb3d8177c Binary files /dev/null and b/common/src/main/resources/assets/devices/textures/gui/laptop_wallpaper_11.png differ diff --git a/common/src/main/resources/assets/devices/textures/gui/minephone.png b/common/src/main/resources/assets/devices/textures/gui/minephone.png new file mode 100644 index 000000000..a4b19851b Binary files /dev/null and b/common/src/main/resources/assets/devices/textures/gui/minephone.png differ diff --git a/common/src/main/resources/devices-common.mixins.json b/common/src/main/resources/devices-common.mixins.json index d58fdf27c..497ff93be 100644 --- a/common/src/main/resources/devices-common.mixins.json +++ b/common/src/main/resources/devices-common.mixins.json @@ -1,9 +1,9 @@ { "required": true, "minVersion": "0.8", - "package": "com.ultreon.devices.mixin.common", + "package": "dev.ultreon.devices.mixin.common", "compatibilityLevel": "JAVA_17", - "plugin": "com.ultreon.devices.mixin.common.MixinPlugin", + "plugin": "dev.ultreon.devices.mixin.common.MixinPlugin", "mixins": [ ], diff --git a/fabric-datagen-helper/build.gradle b/fabric-datagen-helper/build.gradle index a5dd41de3..539831927 100644 --- a/fabric-datagen-helper/build.gradle +++ b/fabric-datagen-helper/build.gradle @@ -28,7 +28,7 @@ dependencies { //include(project(":fabric")) modImplementation "net.fabricmc:fabric-loader:$fabric_loader_version" modApi "net.fabricmc.fabric-api:fabric-api:$fabric_api_version" - modImplementation "com.terraformersmc:modmenu:4.0.6", { + modImplementation "com.terraformersmc:modmenu:$modmenu_version", { exclude module: "fabric-api" } } diff --git a/fabric-datagen-helper/src/main/java/com/jab125/clientint/ClientInit.java b/fabric-datagen-helper/src/main/java/com/jab125/clientint/ClientInit.java index 060ce11b9..e20b9b6a2 100644 --- a/fabric-datagen-helper/src/main/java/com/jab125/clientint/ClientInit.java +++ b/fabric-datagen-helper/src/main/java/com/jab125/clientint/ClientInit.java @@ -15,6 +15,7 @@ import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.util.profiling.ProfilerFiller; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,7 +42,7 @@ public void onInitializeClient() { private String currentCode = "en_us"; private LanguageInfo currentLanguage; @Override - public CompletableFuture reload(PreparationBarrier preparationBarrier, ResourceManager resourceManager, ProfilerFiller preparationsProfiler, ProfilerFiller reloadProfiler, Executor backgroundExecutor, Executor gameExecutor) { + public @NotNull CompletableFuture reload(PreparationBarrier preparationBarrier, ResourceManager resourceManager, ProfilerFiller preparationsProfiler, ProfilerFiller reloadProfiler, Executor backgroundExecutor, Executor gameExecutor) { return CompletableFuture.runAsync(() -> { this.languages = extractLanguages(resourceManager.listPacks()); // extractAllFrom(languages, resourceManager.listPacks(), resourceManager); @@ -67,9 +68,7 @@ public ResourceLocation getFabricId() { } private void extractAllFrom(Map languages, Stream packResourcesStream, ResourceManager resourceManager) { - languages.forEach(((s, languageInfo) -> { - LOGGER.info(s + ", " + languageInfo); - })); + languages.forEach(((s, languageInfo) -> LOGGER.info(s + ", " + languageInfo))); var map = new HashMap(); packResourcesStream.forEach((packResources -> { try { diff --git a/fabric-testmod/build.gradle b/fabric-testmod/build.gradle index 13c6ed6a6..46bc2e49f 100644 --- a/fabric-testmod/build.gradle +++ b/fabric-testmod/build.gradle @@ -30,12 +30,10 @@ dependencies { common(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } modImplementation "net.fabricmc:fabric-loader:$fabric_loader_version" modApi "net.fabricmc.fabric-api:fabric-api:$fabric_api_version" - modImplementation "com.terraformersmc:modmenu:4.0.6", { + modImplementation "com.terraformersmc:modmenu:$modmenu_version", { exclude module: "fabric-api" } - modRuntimeOnly "curse.maven:forgeapiportfabric-547434:3946675" - modRuntimeOnly 'com.electronwill.night-config:core:3.6.3' modRuntimeOnly 'com.electronwill.night-config:toml:3.6.3' } diff --git a/fabric-testmod/src/main/java/com/jab125/testmod/ClientInit.java b/fabric-testmod/src/main/java/com/jab125/testmod/ClientInit.java index 7fe7e8578..495f47076 100644 --- a/fabric-testmod/src/main/java/com/jab125/testmod/ClientInit.java +++ b/fabric-testmod/src/main/java/com/jab125/testmod/ClientInit.java @@ -1,8 +1,7 @@ package com.jab125.testmod; -import com.ultreon.devices.api.ApplicationManager; -import com.ultreon.devices.fabric.BuiltinAppsRegistration; -import com.ultreon.devices.fabric.FabricApplicationRegistration; +import dev.ultreon.devices.api.ApplicationManager; +import dev.ultreon.devices.fabric.FabricApplicationRegistration; import net.fabricmc.api.ClientModInitializer; import net.minecraft.resources.ResourceLocation; diff --git a/fabric-testmod/src/main/java/com/jab125/testmod/TestApp.java b/fabric-testmod/src/main/java/com/jab125/testmod/TestApp.java index 88d1e449c..41bdd3492 100644 --- a/fabric-testmod/src/main/java/com/jab125/testmod/TestApp.java +++ b/fabric-testmod/src/main/java/com/jab125/testmod/TestApp.java @@ -1,7 +1,7 @@ package com.jab125.testmod; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.app.component.Text; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.app.component.Text; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; diff --git a/fabric/build.gradle b/fabric/build.gradle index 42a0d8fed..50e6f8be8 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -24,12 +24,6 @@ loom { } } -repositories { - maven { url = "https://cursemaven.com" } - maven { url "https://maven.terraformersmc.com/releases" } - mavenCentral() -} - configurations { common shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. @@ -44,7 +38,12 @@ dependencies { // Remove the next line if you don't want to depend on the API modApi "dev.architectury:architectury-fabric:$architectury_version" - modApi "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:8.0.0" + implementation project(":api") + + include("io.github.ultreon:ubo:1.3.0") + include("io.github.ultreon.corelibs:commons-v0:0.2.0") + + modApi "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:$forgeconfigapiport_version" modImplementation 'com.electronwill.night-config:core:3.6.5' modImplementation 'com.electronwill.night-config:toml:3.6.5' @@ -61,11 +60,11 @@ dependencies { common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } - modCompileOnly "com.terraformersmc:modmenu:4.0.6", { + modCompileOnly "com.terraformersmc:modmenu:$modmenu_version", { exclude module: "fabric-api" } - modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:12.0.684", { + modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:$rei_version", { exclude module: "fabric-api" } diff --git a/fabric/build/datagen/config/fabric_loader_dependencies.json b/fabric/build/datagen/config/fabric_loader_dependencies.json deleted file mode 100644 index cd0884be5..000000000 --- a/fabric/build/datagen/config/fabric_loader_dependencies.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": 1, - "overrides": { - "forgeconfigapiport": { - "-depends": { - "com_electronwill_night-config_core": "", - "com_electronwill_night-config_toml": "" - } - } - } -} \ No newline at end of file diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesBlockLootTableGenerator.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesBlockLootTableGenerator.java similarity index 73% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesBlockLootTableGenerator.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesBlockLootTableGenerator.java index 30d2a7231..f40e1d8d5 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesBlockLootTableGenerator.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesBlockLootTableGenerator.java @@ -1,12 +1,8 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; -import com.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.init.DeviceBlocks; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.storage.loot.LootTable; - -import java.util.function.BiConsumer; public class DevicesBlockLootTableGenerator extends FabricBlockLootTableProvider { public DevicesBlockLootTableGenerator(FabricDataOutput output) { diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesBlockTagProvider.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesBlockTagProvider.java similarity index 81% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesBlockTagProvider.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesBlockTagProvider.java index 6398c6c50..abfdc04dd 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesBlockTagProvider.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesBlockTagProvider.java @@ -1,9 +1,8 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; -import com.ultreon.devices.Devices; -import com.ultreon.devices.init.DeviceBlocks; -import com.ultreon.devices.init.DeviceItems; -import com.ultreon.devices.init.ModTags; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.init.ModTags; import dev.architectury.registry.registries.Registrar; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; @@ -11,7 +10,6 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; import net.minecraft.data.registries.VanillaRegistries; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import java.util.Objects; @@ -24,7 +22,7 @@ public DevicesBlockTagProvider(FabricDataOutput dataGenerator) { @Override protected void addTags(HolderLookup.Provider provider) { - Registrar blocks = Devices.REGISTRIES.get().get(Registries.BLOCK); + Registrar blocks = UltreonDevicesMod.REGISTRIES.get().get(Registries.BLOCK); TagAppender laptops = this.tag(ModTags.Blocks.LAPTOPS); TagAppender printers = this.tag(ModTags.Blocks.PRINTERS); TagAppender routers = this.tag(ModTags.Blocks.ROUTERS); diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesDataGenerator.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesDataGenerator.java similarity index 96% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesDataGenerator.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesDataGenerator.java index bf71a61bd..a69fca635 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesDataGenerator.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesDataGenerator.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesItemTagProvider.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesItemTagProvider.java similarity index 82% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesItemTagProvider.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesItemTagProvider.java index 937e023f8..179c1b316 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesItemTagProvider.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesItemTagProvider.java @@ -1,11 +1,9 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; -import com.ultreon.devices.Devices; -import com.ultreon.devices.init.DeviceItems; -import com.ultreon.devices.init.DeviceTags; -import com.ultreon.devices.init.ModTags; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.init.DeviceItems; +import dev.ultreon.devices.init.ModTags; import dev.architectury.registry.registries.Registrar; -import dev.architectury.registry.registries.RegistrySupplier; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; import net.minecraft.Util; @@ -24,7 +22,7 @@ public DevicesItemTagProvider(FabricDataOutput dataGenerator) { @Override protected void addTags(HolderLookup.Provider provider) { - Registrar items = Devices.REGISTRIES.get().get(Registries.ITEM); + Registrar items = UltreonDevicesMod.REGISTRIES.get().get(Registries.ITEM); TagAppender laptops = this.tag(ModTags.Items.LAPTOPS); TagAppender printers = this.tag(ModTags.Items.PRINTERS); TagAppender routers = this.tag(ModTags.Items.ROUTERS); diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesLanguageGenerator.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesLanguageGenerator.java similarity index 96% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesLanguageGenerator.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesLanguageGenerator.java index d75ad4a27..6ad06a698 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesLanguageGenerator.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesLanguageGenerator.java @@ -1,8 +1,8 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.ultreon.devices.init.DeviceItems; +import dev.ultreon.devices.init.DeviceItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider; import net.minecraft.client.resources.language.I18n; @@ -109,7 +109,7 @@ private void createTranslationsForLOLCAT(TranslationBuilder translationBuilder) createTranslationsFromTemplate(translationBuilder, "lol"); } - private void createTranslationsForDutch(TranslationBuilder translationBuilder) { // TODO: @Qboi123 + private void createTranslationsForDutch(TranslationBuilder translationBuilder) { // TODO: @XyperCode createTranslationsFromTemplate(translationBuilder, "nl"); } @@ -119,7 +119,7 @@ private void createTranslationsForEnglish(TranslationBuilder translationBuilder) } catch (Exception e) {e.printStackTrace();} createTranslationsFromTemplate(translationBuilder, "en"); } - + private String get(DyeColor dye) { if(differentLanguageCode()) { return grabIt("color.minecraft." + dye.getName()); @@ -129,7 +129,6 @@ private String get(DyeColor dye) { private String grabIt(String key) { try { - String string = String.format("/assets/minecraft/lang/%s.json", this.languageCode); var d = Paths.get("lang/" + this.languageCode + ".json").toFile(); var q = new BufferedReader(new FileReader(d)); var gg = new Gson().fromJson(q, JsonObject.class); diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesLootTableGenerator.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesLootTableGenerator.java similarity index 68% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesLootTableGenerator.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesLootTableGenerator.java index 8507c8e2c..5ba04589f 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesLootTableGenerator.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesLootTableGenerator.java @@ -1,18 +1,14 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; -import com.ultreon.devices.Devices; -import com.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.init.DeviceBlocks; import dev.architectury.registry.registries.Registrar; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; -import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.parameters.LootContextParam; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; import java.util.function.BiConsumer; @@ -30,10 +26,10 @@ public void generate() { @Override public void generate(BiConsumer resourceLocationBuilderBiConsumer) { - Registrar blocks = Devices.REGISTRIES.get().get(Registries.BLOCK); + Registrar blocks = UltreonDevicesMod.REGISTRIES.get().get(Registries.BLOCK); for (var block : DeviceBlocks.getAllBlocks().toList()) { ResourceLocation id = blocks.getId(block); - if (id.getNamespace().equals(Devices.MOD_ID)) { + if (id != null && id.getNamespace().equals(UltreonDevicesMod.MOD_ID)) { resourceLocationBuilderBiConsumer.accept(new ResourceLocation(id.getNamespace(), "blocks/" + id.getPath()), createSingleItemTable(block.asItem())); } diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesModelGenerator.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesModelGenerator.java similarity index 98% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesModelGenerator.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesModelGenerator.java index 3d0838c74..4f38e30d6 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesModelGenerator.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesModelGenerator.java @@ -1,9 +1,9 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; import com.google.gson.Gson; import com.google.gson.JsonElement; -import com.ultreon.devices.init.DeviceBlocks; -import com.ultreon.devices.init.DeviceItems; +import dev.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.init.DeviceItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; import net.minecraft.data.models.BlockModelGenerators; diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesRecipeProvider.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesRecipeProvider.java similarity index 92% rename from fabric/src/main/java/com/ultreon/devices/datagen/DevicesRecipeProvider.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DevicesRecipeProvider.java index 10dd72745..a01a46b1e 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DevicesRecipeProvider.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DevicesRecipeProvider.java @@ -1,15 +1,15 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; -import com.ultreon.devices.Devices; -import com.ultreon.devices.block.OfficeChairBlock; -import com.ultreon.devices.block.PrinterBlock; -import com.ultreon.devices.block.RouterBlock; -import com.ultreon.devices.init.DeviceBlocks; -import com.ultreon.devices.init.DeviceItems; -import com.ultreon.devices.init.DeviceTags; -import com.ultreon.devices.init.ModTags; -import com.ultreon.devices.item.FlashDriveItem; -import com.ultreon.devices.util.ItemColors; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.block.OfficeChairBlock; +import dev.ultreon.devices.block.PrinterBlock; +import dev.ultreon.devices.block.RouterBlock; +import dev.ultreon.devices.init.DeviceBlocks; +import dev.ultreon.devices.init.DeviceItems; +import dev.ultreon.devices.init.DeviceTags; +import dev.ultreon.devices.init.ModTags; +import dev.ultreon.devices.item.FlashDriveItem; +import dev.ultreon.devices.util.ItemColors; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; import net.minecraft.data.recipes.*; @@ -17,18 +17,15 @@ import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.SmeltingRecipe; import net.minecraft.world.level.ItemLike; -import java.util.function.Consumer; - public class DevicesRecipeProvider extends FabricRecipeProvider { public DevicesRecipeProvider(FabricDataOutput dataGenerator) { super(dataGenerator); } @Override - public void buildRecipes(Consumer exporter) { + public void buildRecipes(RecipeOutput exporter) { DeviceBlocks.LAPTOPS.getMap().forEach(((dyeColor, blockRegistrySupplier) -> laptop(exporter, blockRegistrySupplier.get(), dyeColor))); //***********************// @@ -46,7 +43,7 @@ public void buildRecipes(Consumer exporter) { .define('f', DeviceItems.COMPONENT_FLASH_CHIP.get()) .define('c', DeviceItems.COMPONENT_CIRCUIT_BOARD.get()) .unlockedBy("has_flash_chip", has(DeviceItems.COMPONENT_FLASH_CHIP.get())) - .group(Devices.MOD_ID + ":laptop") + .group(UltreonDevicesMod.MOD_ID + ":laptop") .save(exporter); } @@ -65,7 +62,7 @@ public void buildRecipes(Consumer exporter) { .define('c', DeviceItems.COMPONENT_CARRIAGE.get()) .define('b', DeviceItems.COMPONENT_CONTROLLER_UNIT.get()) .unlockedBy("has_carriage", has(DeviceItems.COMPONENT_CARRIAGE.get())) - .group(Devices.MOD_ID + ":printer") + .group(UltreonDevicesMod.MOD_ID + ":printer") .save(exporter); } @@ -84,7 +81,7 @@ public void buildRecipes(Consumer exporter) { .define('c', DeviceItems.COMPONENT_CIRCUIT_BOARD.get()) .define('b', DeviceItems.COMPONENT_BATTERY.get()) .unlockedBy("has_circuit_board", has(DeviceItems.COMPONENT_CIRCUIT_BOARD.get())) - .group(Devices.MOD_ID + ":router") + .group(UltreonDevicesMod.MOD_ID + ":router") .save(exporter); } @@ -102,7 +99,7 @@ public void buildRecipes(Consumer exporter) { .define('w', DeviceItems.WHEEL.get()) .define('f', Items.COBBLESTONE_WALL) .unlockedBy("has_wheel", has(DeviceItems.WHEEL.get())) - .group(Devices.MOD_ID + ":office_chair") + .group(UltreonDevicesMod.MOD_ID + ":office_chair") .save(exporter); } @@ -230,7 +227,7 @@ public void buildRecipes(Consumer exporter) { .save(exporter); } - public static void laptop(Consumer exporter, ItemLike laptop, DyeColor color) { + public static void laptop(RecipeOutput exporter, ItemLike laptop, DyeColor color) { ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, laptop) .define('+', DyeUtils.getWoolFromDye(color)) .define('/', Items.IRON_INGOT) diff --git a/fabric/src/main/java/com/ultreon/devices/datagen/DyeUtils.java b/fabric/src/main/java/dev/ultreon/devices/datagen/DyeUtils.java similarity index 97% rename from fabric/src/main/java/com/ultreon/devices/datagen/DyeUtils.java rename to fabric/src/main/java/dev/ultreon/devices/datagen/DyeUtils.java index 2029d3fba..37924ba31 100644 --- a/fabric/src/main/java/com/ultreon/devices/datagen/DyeUtils.java +++ b/fabric/src/main/java/dev/ultreon/devices/datagen/DyeUtils.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.datagen; +package dev.ultreon.devices.datagen; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; diff --git a/fabric/src/main/java/com/ultreon/devices/fabric/BuiltinAppsRegistration.java b/fabric/src/main/java/dev/ultreon/devices/fabric/BuiltinAppsRegistration.java similarity index 71% rename from fabric/src/main/java/com/ultreon/devices/fabric/BuiltinAppsRegistration.java rename to fabric/src/main/java/dev/ultreon/devices/fabric/BuiltinAppsRegistration.java index a5399c1f8..9ccb79c68 100644 --- a/fabric/src/main/java/com/ultreon/devices/fabric/BuiltinAppsRegistration.java +++ b/fabric/src/main/java/dev/ultreon/devices/fabric/BuiltinAppsRegistration.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.fabric; +package dev.ultreon.devices.fabric; -import com.ultreon.devices.BuiltinApps; +import dev.ultreon.devices.BuiltinApps; public class BuiltinAppsRegistration implements FabricApplicationRegistration { @Override diff --git a/fabric/src/main/java/com/ultreon/devices/fabric/FabricApplicationRegistration.java b/fabric/src/main/java/dev/ultreon/devices/fabric/FabricApplicationRegistration.java similarity index 74% rename from fabric/src/main/java/com/ultreon/devices/fabric/FabricApplicationRegistration.java rename to fabric/src/main/java/dev/ultreon/devices/fabric/FabricApplicationRegistration.java index ecb9111cb..dac0120b1 100644 --- a/fabric/src/main/java/com/ultreon/devices/fabric/FabricApplicationRegistration.java +++ b/fabric/src/main/java/dev/ultreon/devices/fabric/FabricApplicationRegistration.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.fabric; +package dev.ultreon.devices.fabric; @FunctionalInterface public interface FabricApplicationRegistration { diff --git a/fabric/src/main/java/com/ultreon/devices/fabric/DevicesFabric.java b/fabric/src/main/java/dev/ultreon/devices/fabric/UltreonDevicesModFabric.java similarity index 73% rename from fabric/src/main/java/com/ultreon/devices/fabric/DevicesFabric.java rename to fabric/src/main/java/dev/ultreon/devices/fabric/UltreonDevicesModFabric.java index 399f66d75..e18b34c46 100644 --- a/fabric/src/main/java/com/ultreon/devices/fabric/DevicesFabric.java +++ b/fabric/src/main/java/dev/ultreon/devices/fabric/UltreonDevicesModFabric.java @@ -1,29 +1,29 @@ -package com.ultreon.devices.fabric; +package dev.ultreon.devices.fabric; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.Devices; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.api.print.PrintingManager; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.init.RegistrationHandler; -import fuzs.forgeconfigapiport.api.config.v2.ForgeConfigRegistry; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.print.PrintingManager; +import dev.ultreon.devices.init.RegistrationHandler; +import fuzs.forgeconfigapiport.fabric.api.neoforge.v4.NeoForgeConfigRegistry; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.entrypoint.EntrypointContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; -import net.minecraftforge.fml.config.ModConfig; +import net.neoforged.fml.config.ModConfig; import java.util.ArrayList; import java.util.List; import java.util.Map; -public class DevicesFabric extends Devices implements ModInitializer { +public class UltreonDevicesModFabric extends UltreonDevicesMod implements ModInitializer { @Override public void onInitialize() { - ForgeConfigRegistry.INSTANCE.register(Devices.MOD_ID, ModConfig.Type.CLIENT, DeviceConfig.CONFIG); + NeoForgeConfigRegistry.INSTANCE.register(UltreonDevicesMod.MOD_ID, ModConfig.Type.CLIENT, DeviceConfig.CONFIG); this.init(); @@ -55,7 +55,7 @@ protected void registerApplicationEvent() { @Override protected List getApplications() { - return Laptop.getApplicationsForFabric(); + return MineOS.getApplicationsForFabric(); } @Override diff --git a/fabric/src/main/java/com/ultreon/devices/fabric/client/FabricRenderRegistry.java b/fabric/src/main/java/dev/ultreon/devices/fabric/client/FabricRenderRegistry.java similarity index 80% rename from fabric/src/main/java/com/ultreon/devices/fabric/client/FabricRenderRegistry.java rename to fabric/src/main/java/dev/ultreon/devices/fabric/client/FabricRenderRegistry.java index 4c881dd5c..09100b166 100644 --- a/fabric/src/main/java/com/ultreon/devices/fabric/client/FabricRenderRegistry.java +++ b/fabric/src/main/java/dev/ultreon/devices/fabric/client/FabricRenderRegistry.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.fabric.client; +package dev.ultreon.devices.fabric.client; -import com.ultreon.devices.client.RenderRegistry; +import dev.ultreon.devices.client.RenderRegistry; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.level.block.Block; diff --git a/fabric/src/main/resources/META-INF/services/com.ultreon.devices.client.RenderRegistry b/fabric/src/main/resources/META-INF/services/com.ultreon.devices.client.RenderRegistry deleted file mode 100644 index d9ff0e9d8..000000000 --- a/fabric/src/main/resources/META-INF/services/com.ultreon.devices.client.RenderRegistry +++ /dev/null @@ -1 +0,0 @@ -com.ultreon.devices.fabric.client.FabricRenderRegistry \ No newline at end of file diff --git a/fabric/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry b/fabric/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry new file mode 100644 index 000000000..b9c8090d4 --- /dev/null +++ b/fabric/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry @@ -0,0 +1 @@ +dev.ultreon.devices.fabric.client.FabricRenderRegistry \ No newline at end of file diff --git a/fabric/src/main/resources/devices.mixins.json b/fabric/src/main/resources/devices.mixins.json index 2d5cbb52c..9de9a033d 100644 --- a/fabric/src/main/resources/devices.mixins.json +++ b/fabric/src/main/resources/devices.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "com.ultreon.devices.mixin.fabric", + "package": "dev.ultreon.devices.mixin.fabric", "compatibilityLevel": "JAVA_17", "mixins": [ ], diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index bc79489dc..f76052dc8 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -8,7 +8,7 @@ "Ultreon Team" ], "contributors": [ - "Qboi123", + "XyperCode", "Jab125", "MrCrayfish", "MinecraftDoodler", @@ -36,13 +36,13 @@ "environment": "*", "entrypoints": { "main": [ - "com.ultreon.devices.fabric.DevicesFabric" + "dev.ultreon.devices.fabric.UltreonDevicesModFabric" ], "devices:application_registration": [ - "com.ultreon.devices.fabric.BuiltinAppsRegistration" + "dev.ultreon.devices.fabric.BuiltinAppsRegistration" ], "fabric-datagen": [ - "com.ultreon.devices.datagen.DevicesDataGenerator" + "dev.ultreon.devices.datagen.DevicesDataGenerator" ] }, "mixins": [ @@ -51,8 +51,8 @@ ], "depends": { "fabricloader": ">=${loaderVersion}", - "minecraft": [">=1.20 <=1.20.1"], - "architectury": ">=9.1 <10" + "minecraft": ["1.20.4"], + "architectury": ">=11 <12" }, "custom": { "modmenu": { diff --git a/fabric/src/main/resources/translations/en.json b/fabric/src/main/resources/translations/en.json index a4f73934e..cd1172fb1 100644 --- a/fabric/src/main/resources/translations/en.json +++ b/fabric/src/main/resources/translations/en.json @@ -1,5 +1,5 @@ { - "laptop": "Laptop", + "laptop": "MineOS", "laptop_block": "%2$s %1$s", "printer": "Printer", diff --git a/fabric/src/main/resources/translations/nl.json b/fabric/src/main/resources/translations/nl.json index e10f6d415..61a4f35fe 100644 --- a/fabric/src/main/resources/translations/nl.json +++ b/fabric/src/main/resources/translations/nl.json @@ -1,5 +1,5 @@ { - "laptop": "Laptop", + "laptop": "MineOS", "laptop_block": "%2$s %1$s", "printer": "Printer", diff --git a/forge/build.gradle b/forge/build.gradle index 170840229..ca90d3577 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -33,9 +33,23 @@ dependencies { // Remove the next line if you don't want to depend on the API modApi "dev.architectury:architectury-forge:$architectury_version" + modApi "fuzs.forgeconfigapiport:forgeconfigapiport-forge:$forgeconfigapiport_version" + + forgeRuntimeLibrary project(":api") + + include forgeRuntimeLibrary("io.github.ultreon:ubo:1.3.0") + include forgeRuntimeLibrary("io.github.ultreon.corelibs:commons-v0:0.2.0") + common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } + forgeRuntimeLibrary "io.github.spair:imgui-java-binding:1.86.10" // FIXME make dep an api(...) in advanced debug. + forgeRuntimeLibrary "io.github.spair:imgui-java-lwjgl3:1.86.10" // FIXME make dep an api(...) in advanced debug. + implementation "io.github.spair:imgui-java-lwjgl3:1.86.10" // FIXME make dep an api(...) in advanced debug. + minecraftNatives "io.github.spair:imgui-java-natives-linux:1.86.10" // FIXME make dep an api(...) in advanced debug. + minecraftNatives "io.github.spair:imgui-java-natives-macos:1.86.10" // FIXME make dep an api(...) in advanced debug. + minecraftNatives "io.github.spair:imgui-java-natives-windows:1.86.10" // FIXME make dep an api(...) in advanced debug. + // forgeRuntimeLibrary "com.ultreon:ultranlang:0.1.0+6" // implementation include("com.ultreon:ultranlang:0.1.0+6") } @@ -64,11 +78,11 @@ shadowJar { configurations = [project.configurations.shadowCommon] archiveClassifier = "dev-shadow" -// relocate 'org.jetbrains.kotlin', "com.ultreon.devices.shadow.org.jetbrains.kotlin" -// relocate 'org.jetbrains.kotlinx', "com.ultreon.devices.shadow.org.jetbrains.kotlinx" +// relocate 'org.jetbrains.kotlin', "dev.ultreon.devices.shadow.org.jetbrains.kotlin" +// relocate 'org.jetbrains.kotlinx', "dev.ultreon.devices.shadow.org.jetbrains.kotlinx" // -// relocate 'kotlin', "com.ultreon.devices.shadow.kotlin" -// relocate 'kotlinx', "com.ultreon.devices.shadow.kotlinx" +// relocate 'kotlin', "dev.ultreon.devices.shadow.kotlin" +// relocate 'kotlinx', "dev.ultreon.devices.shadow.kotlinx" } remapJar { diff --git a/forge/src/main/java/com/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java b/forge/src/main/java/dev/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java similarity index 84% rename from forge/src/main/java/com/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java rename to forge/src/main/java/dev/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java index 43952d2db..07a26a43a 100644 --- a/forge/src/main/java/com/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java +++ b/forge/src/main/java/dev/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.block.entity.forge; +package dev.ultreon.devices.block.entity.forge; import net.minecraft.world.phys.AABB; diff --git a/forge/src/main/java/com/ultreon/devices/forge/BuiltinAppsRegistration.java b/forge/src/main/java/dev/ultreon/devices/forge/BuiltinAppsRegistration.java similarity index 81% rename from forge/src/main/java/com/ultreon/devices/forge/BuiltinAppsRegistration.java rename to forge/src/main/java/dev/ultreon/devices/forge/BuiltinAppsRegistration.java index 6a94a343f..eb8f9394b 100644 --- a/forge/src/main/java/com/ultreon/devices/forge/BuiltinAppsRegistration.java +++ b/forge/src/main/java/dev/ultreon/devices/forge/BuiltinAppsRegistration.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.forge; +package dev.ultreon.devices.forge; -import com.ultreon.devices.BuiltinApps; +import dev.ultreon.devices.BuiltinApps; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; diff --git a/forge/src/main/java/com/ultreon/devices/forge/DevicesForge.java b/forge/src/main/java/dev/ultreon/devices/forge/DevicesForge.java similarity index 78% rename from forge/src/main/java/com/ultreon/devices/forge/DevicesForge.java rename to forge/src/main/java/dev/ultreon/devices/forge/DevicesForge.java index bce90f5da..0172c58e2 100644 --- a/forge/src/main/java/com/ultreon/devices/forge/DevicesForge.java +++ b/forge/src/main/java/dev/ultreon/devices/forge/DevicesForge.java @@ -1,27 +1,25 @@ -package com.ultreon.devices.forge; +package dev.ultreon.devices.forge; import com.mojang.logging.LogUtils; -import com.ultreon.devices.DeviceConfig; -import com.ultreon.devices.Devices; -import com.ultreon.devices.LaunchException; -import com.ultreon.devices.Reference; -import com.ultreon.devices.api.app.Application; -import com.ultreon.devices.api.print.IPrint; -import com.ultreon.devices.api.print.PrintingManager; -import com.ultreon.devices.core.Laptop; -import com.ultreon.devices.event.WorldDataHandler; -import com.ultreon.devices.init.RegistrationHandler; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.LaunchException; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.print.PrintingManager; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.event.WorldDataHandler; +import dev.ultreon.devices.init.RegistrationHandler; import dev.architectury.platform.forge.EventBuses; +import fuzs.forgeconfigapiport.forge.api.neoforge.v4.NeoForgeConfigRegistry; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.MavenVersionStringHelper; import net.minecraftforge.data.loading.DatagenModLoader; import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; @@ -30,7 +28,6 @@ import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.util.ObfuscationReflectionHelper; -import net.minecraftforge.forgespi.language.IModInfo; import org.slf4j.Logger; import java.util.List; @@ -40,7 +37,7 @@ @Mod(Reference.MOD_ID) public final class DevicesForge { public static final Logger LOGGER = LogUtils.getLogger(); - private final Devices instance = new Devices() { + private final UltreonDevicesMod instance = new UltreonDevicesMod() { @Override protected void registerApplicationEvent() { DevicesForge.this.modEventBus.post(new ForgeApplicationRegistration()); @@ -53,7 +50,7 @@ public int getBurnTime(ItemStack stack, RecipeType type) { @Override protected List getApplications() { - return ObfuscationReflectionHelper.getPrivateValue(Laptop.class, null, "APPLICATIONS"); + return ObfuscationReflectionHelper.getPrivateValue(MineOS.class, null, "APPLICATIONS"); } @Override @@ -75,11 +72,11 @@ protected Map getRegisteredRenders() { public DevicesForge() throws LaunchException { super(); - EventBuses.registerModEventBus(Devices.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); + EventBuses.registerModEventBus(UltreonDevicesMod.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); this.modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); this.modEventBus.register(BuiltinAppsRegistration.class); - Devices.preInit(); + UltreonDevicesMod.preInit(); ModLoadingContext context = ModLoadingContext.get(); IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; @@ -87,7 +84,7 @@ public DevicesForge() throws LaunchException { // Common side stuff LOGGER.info("Initializing registration handler and mod config."); RegistrationHandler.register(); - context.registerConfig(ModConfig.Type.CLIENT, DeviceConfig.CONFIG); + NeoForgeConfigRegistry.INSTANCE.register(ModConfig.Type.CLIENT, DeviceConfig.CONFIG); forgeEventBus.register(this); forgeEventBus.register(new WorldDataHandler()); diff --git a/forge/src/main/java/com/ultreon/devices/forge/ForgeApplicationRegistration.java b/forge/src/main/java/dev/ultreon/devices/forge/ForgeApplicationRegistration.java similarity index 83% rename from forge/src/main/java/com/ultreon/devices/forge/ForgeApplicationRegistration.java rename to forge/src/main/java/dev/ultreon/devices/forge/ForgeApplicationRegistration.java index f32844609..74a6ab8e7 100644 --- a/forge/src/main/java/com/ultreon/devices/forge/ForgeApplicationRegistration.java +++ b/forge/src/main/java/dev/ultreon/devices/forge/ForgeApplicationRegistration.java @@ -1,4 +1,4 @@ -package com.ultreon.devices.forge; +package dev.ultreon.devices.forge; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.event.IModBusEvent; diff --git a/forge/src/main/java/com/ultreon/devices/forge/client/ForgeRenderRegistry.java b/forge/src/main/java/dev/ultreon/devices/forge/client/ForgeRenderRegistry.java similarity index 80% rename from forge/src/main/java/com/ultreon/devices/forge/client/ForgeRenderRegistry.java rename to forge/src/main/java/dev/ultreon/devices/forge/client/ForgeRenderRegistry.java index 9884dbe24..79b78f92f 100644 --- a/forge/src/main/java/com/ultreon/devices/forge/client/ForgeRenderRegistry.java +++ b/forge/src/main/java/dev/ultreon/devices/forge/client/ForgeRenderRegistry.java @@ -1,6 +1,6 @@ -package com.ultreon.devices.forge.client; +package dev.ultreon.devices.forge.client; -import com.ultreon.devices.client.RenderRegistry; +import dev.ultreon.devices.client.RenderRegistry; import dev.architectury.registry.client.rendering.RenderTypeRegistry; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.level.block.Block; diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index f76b37787..535815f11 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -15,7 +15,7 @@ displayName = "Devices Mod" displayURL = "https://github.com/Ultreon/devices-mod" logoFile="devices_mod.png" credits = "Thanks to MrCrayfish for the idea and the original mod that was made in 1.12.2. Thank you to MinecraftDoodler for helping with textures. Thank you to lizterzapzap for the Devices Mod icon. Cheers to these people for donating during the development: Mastef Chief, Haunted Corpse, Jake Crowley, fabbe50, PlayDashGaming, jack jook, Hunstagamez, Techyy YT, MinecraftDoodler, Norge100YT, Cyberman2208, CreepergamingsMC" -authors = "Qboi123, Jab125" +authors = "XyperCode, Jab125" description = "${description}" itemIcon = "devices:red_laptop" @@ -30,13 +30,13 @@ side = "BOTH" [[dependencies.devices]] modId = "minecraft" mandatory = true -versionRange = "[1.20,1.20.1]" +versionRange = "1.20.4" ordering = "NONE" side = "BOTH" [[dependencies.devices]] modId = "architectury" mandatory = true -versionRange = "[9.1,10)" +versionRange = "[11,12)" ordering = "NONE" side = "BOTH" diff --git a/forge/src/main/resources/META-INF/services/com.ultreon.devices.client.RenderRegistry b/forge/src/main/resources/META-INF/services/com.ultreon.devices.client.RenderRegistry deleted file mode 100644 index 49246736a..000000000 --- a/forge/src/main/resources/META-INF/services/com.ultreon.devices.client.RenderRegistry +++ /dev/null @@ -1 +0,0 @@ -com.ultreon.devices.forge.client.ForgeRenderRegistry \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry b/forge/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry new file mode 100644 index 000000000..ade0fec66 --- /dev/null +++ b/forge/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry @@ -0,0 +1 @@ +dev.ultreon.devices.forge.client.ForgeRenderRegistry \ No newline at end of file diff --git a/forge/src/main/resources/devices.mixins.json b/forge/src/main/resources/devices.mixins.json index 7a404d86a..064b602d2 100644 --- a/forge/src/main/resources/devices.mixins.json +++ b/forge/src/main/resources/devices.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "com.ultreon.devices.devices.mixin.forge", + "package": "dev.ultreon.devices.devices.mixin.forge", "compatibilityLevel": "JAVA_17", "mixins": [ ], diff --git a/gradle.properties b/gradle.properties index 3536c4890..1fd86fac3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,19 +1,20 @@ org.gradle.jvmargs=-Xmx5G # Platform related -minecraft_version=1.20.1 -platforms=forge,fabric +minecraft_version=1.20.4 +platforms=forge,neoforge,fabric # Project related archives_base_name=devices -maven_group=com.ultreon.mods -mod_version=0.8.2 +maven_group=dev.ultreon.mods +mod_version=0.9.0 mod_description=Adds working electronic devices into Minecraft!\\nCurseForge: https://curseforge.com/minecraft/mc-mods/devices-mod\\nModrinth: https://modrinth.com/mod/devices-mod\\nSource Code: https://github.com/Ultreon/devices-mod\\n\\nOriginal mod made by MrCrayfish called \\"MrCrayfish's Device Mod\\".\\nAvailable at: https://mrcrayfish.com/mods/cdm\\nSource Code: https://github.com/MrCrayfish/MrCrayfishDeviceMod # Modloader related -fabric_loader_version=0.14.22 -forge_version=47.1.3 +fabric_loader_version=0.15.3 +forge_version=49.0.49 +neoforge_version=20.4.233 # Geckolib geckolib_version_fabric=4.2.1 @@ -21,5 +22,8 @@ geckolib_version_quilt=4.2.1 geckolib_version_forge=4.2.1 # Dependency related -architectury_version=9.1.12 -fabric_api_version=0.86.1+1.20.1 +architectury_version=11.1.17 +fabric_api_version=0.97.0+1.20.4 +modmenu_version=9.2.0-beta.2 +rei_version=14.1.720 +forgeconfigapiport_version=20.4.2 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 59bc51a20..17655d0ef 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/licenses/ultreon-api-1.0.txt b/licenses/ultreon-api-1.0.txt index 809c50e5f..871a9ee05 100644 --- a/licenses/ultreon-api-1.0.txt +++ b/licenses/ultreon-api-1.0.txt @@ -1,4 +1,4 @@ -Copyright (c) 2022 Qboi123 (https://github.com/Qboi123) +Copyright (c) 2022 XyperCode (https://github.com/XyperCode) Ultreon API License (v1.0) --------------------------- diff --git a/neoforge/build.gradle b/neoforge/build.gradle new file mode 100644 index 000000000..867dc6cce --- /dev/null +++ b/neoforge/build.gradle @@ -0,0 +1,107 @@ +//file:noinspection GrDeprecatedAPIUsage +//file:noinspection GroovyAssignabilityCheck +plugins { + id "com.github.johnrengelman.shadow" version "7.1.2" +} + +version rootProject.version + +architectury { + platformSetupLoomIde() + neoForge() +} + +loom { + accessWidenerPath = project(":common").loom.accessWidenerPath +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentNeoForge.extendsFrom common +} + +repositories { + maven { url "https://maven.neoforged.net/releases/" } +} + +dependencies { + neoForge "net.neoforged:neoforge:$neoforge_version" + // Remove the next line if you don't want to depend on the API + modApi "dev.architectury:architectury-neoforge:$architectury_version" + + include forgeRuntimeLibrary("io.github.ultreon:ubo:1.3.0") + include forgeRuntimeLibrary("io.github.ultreon.corelibs:commons-v0:0.2.0") + + forgeRuntimeLibrary project(":api") + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionNeoForge")) { transitive = false } +} + +processResources { + inputs.property "version", rootProject.getIngameVersion() + inputs.property "description", rootProject.getModDescription() + System.out.println(inputs.getProperties()) + + filesMatching("META-INF/neoforge.mods.toml") { + HashMap p = new HashMap<>() + p.put("version", rootProject.getIngameVersion()) + p.put("description", rootProject.getModDescription()) + //noinspection GroovyAssignabilityCheck + p.put("loaderVersion", rootProject.neoforge_version.split("\\.")[0]) + p.put("forgeVersion", rootProject.neoforge_version) + p.put("minecraftVersion", rootProject.architectury.minecraft) + expand(p) + } +} + +shadowJar { + exclude "fabric.mod.json" + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + archiveClassifier = "dev-shadow" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar + archiveClassifier = null +} + +jar { + archiveClassifier = "dev" +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +publishing { + publications { + mavenNeoForge(MavenPublication) { + System.out.println(artifactId) + artifactId = rootProject.archivesBaseName + "-neoForge" + //artifactId = rootProject.archivesBaseName + "-neoForge" + //project.name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } + rootProject.setupRepositories(repositories) +} + diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties new file mode 100644 index 000000000..2914393db --- /dev/null +++ b/neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=neoforge \ No newline at end of file diff --git a/neoforge/src/main/java/dev/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java b/neoforge/src/main/java/dev/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java new file mode 100644 index 000000000..43ebcb217 --- /dev/null +++ b/neoforge/src/main/java/dev/ultreon/devices/block/entity/forge/RouterBlockEntityImpl.java @@ -0,0 +1,11 @@ +package dev.ultreon.devices.block.entity.forge; + +import net.minecraft.world.phys.AABB; + +import static net.neoforged.neoforge.client.extensions.IBlockEntityRendererExtension.INFINITE_EXTENT_AABB; + +public class RouterBlockEntityImpl { + public AABB getRenderBoundingBox() { + return INFINITE_EXTENT_AABB; + } +} diff --git a/neoforge/src/main/java/dev/ultreon/devices/forge/BuiltinAppsRegistration.java b/neoforge/src/main/java/dev/ultreon/devices/forge/BuiltinAppsRegistration.java new file mode 100644 index 000000000..3930dd249 --- /dev/null +++ b/neoforge/src/main/java/dev/ultreon/devices/forge/BuiltinAppsRegistration.java @@ -0,0 +1,12 @@ +package dev.ultreon.devices.forge; + +import dev.ultreon.devices.BuiltinApps; +import net.neoforged.bus.api.EventPriority; +import net.neoforged.bus.api.SubscribeEvent; + +public class BuiltinAppsRegistration { + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void registerBuiltinApps(NeoForgeApplicationRegistration event) { + BuiltinApps.registerBuiltinApps(); + } +} diff --git a/neoforge/src/main/java/dev/ultreon/devices/forge/DevicesNeoForge.java b/neoforge/src/main/java/dev/ultreon/devices/forge/DevicesNeoForge.java new file mode 100644 index 000000000..2d40f2bcf --- /dev/null +++ b/neoforge/src/main/java/dev/ultreon/devices/forge/DevicesNeoForge.java @@ -0,0 +1,118 @@ +package dev.ultreon.devices.forge; + +import com.mojang.logging.LogUtils; +import dev.ultreon.devices.DeviceConfig; +import dev.ultreon.devices.UltreonDevicesMod; +import dev.ultreon.devices.LaunchException; +import dev.ultreon.devices.Reference; +import dev.ultreon.devices.api.app.Application; +import dev.ultreon.devices.api.print.IPrint; +import dev.ultreon.devices.api.print.PrintingManager; +import dev.ultreon.devices.mineos.client.MineOS; +import dev.ultreon.devices.event.WorldDataHandler; +import dev.ultreon.devices.init.RegistrationHandler; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeType; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent; +import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent; +import net.neoforged.fml.util.ObfuscationReflectionHelper; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.data.loading.DatagenModLoader; +import org.slf4j.Logger; + +import java.util.List; +import java.util.Map; + +// The value here should match an entry in the META-INF/neoforge.mods.toml file +@Mod(Reference.MOD_ID) +public final class DevicesNeoForge { + public static final Logger LOGGER = LogUtils.getLogger(); + private final UltreonDevicesMod instance = new UltreonDevicesMod() { + @Override + protected void registerApplicationEvent() { + DevicesNeoForge.this.modEventBus.post(new NeoForgeApplicationRegistration()); + } + + @Override + public int getBurnTime(ItemStack stack, RecipeType type) { + return stack.getBurnTime(type); + } + + @Override + protected List getApplications() { + return ObfuscationReflectionHelper.getPrivateValue(MineOS.class, null, "APPLICATIONS"); + } + + @Override + @OnlyIn(Dist.CLIENT) + @SuppressWarnings("DataFlowIssue") + protected void setRegisteredRenders(Map map) { + ObfuscationReflectionHelper.setPrivateValue(PrintingManager.class, null, map, "registeredRenders"); + } + + @Override + @OnlyIn(Dist.CLIENT) + protected Map getRegisteredRenders() { + return ObfuscationReflectionHelper.getPrivateValue(PrintingManager.class, null, "registeredRenders"); + } + }; + + public IEventBus modEventBus; + + public DevicesNeoForge(IEventBus modEventBus) throws LaunchException { + super(); + + this.modEventBus = modEventBus; + this.modEventBus.register(BuiltinAppsRegistration.class); + + UltreonDevicesMod.preInit(); + + ModLoadingContext context = ModLoadingContext.get(); + IEventBus forgeEventBus = NeoForge.EVENT_BUS; + + // Common side stuff + LOGGER.info("Initializing registration handler and mod config."); + RegistrationHandler.register(); + context.registerConfig(ModConfig.Type.CLIENT, DeviceConfig.CONFIG); + + forgeEventBus.register(this); + forgeEventBus.register(new WorldDataHandler()); + + LOGGER.info("Registering common setup handler, and load complete handler."); + this.modEventBus.addListener(this::fmlCommonSetup); + this.modEventBus.addListener(this::fmlLoadComplete); + + // Server side stuff + LOGGER.info("Registering server setup handler."); + this.modEventBus.addListener(this::fmlServerSetup); + + // Client side stuff + if (!DatagenModLoader.isRunningDataGen()) { + LOGGER.info("Registering the reload listener."); +// ((ReloadableResourceManager) Minecraft.getInstance().getResourceManager()).registerReloadListener(this); + } + + // Register ourselves for server and other game events we are interested in + LOGGER.info("Registering mod class to forge events."); + forgeEventBus.register(this); + } + + private void fmlCommonSetup(FMLCommonSetupEvent t) { + this.instance.init(); + } + + private void fmlLoadComplete(FMLLoadCompleteEvent t) { + this.instance.loadComplete(); + } + + private void fmlServerSetup(FMLDedicatedServerSetupEvent t) { + this.instance.serverSetup(); + } +} diff --git a/neoforge/src/main/java/dev/ultreon/devices/forge/NeoForgeApplicationRegistration.java b/neoforge/src/main/java/dev/ultreon/devices/forge/NeoForgeApplicationRegistration.java new file mode 100644 index 000000000..09c843f2b --- /dev/null +++ b/neoforge/src/main/java/dev/ultreon/devices/forge/NeoForgeApplicationRegistration.java @@ -0,0 +1,7 @@ +package dev.ultreon.devices.forge; + +import net.neoforged.bus.api.Event; +import net.neoforged.fml.event.IModBusEvent; + +public class NeoForgeApplicationRegistration extends Event implements IModBusEvent { +} diff --git a/neoforge/src/main/java/dev/ultreon/devices/forge/client/ForgeRenderRegistry.java b/neoforge/src/main/java/dev/ultreon/devices/forge/client/ForgeRenderRegistry.java new file mode 100644 index 000000000..79b78f92f --- /dev/null +++ b/neoforge/src/main/java/dev/ultreon/devices/forge/client/ForgeRenderRegistry.java @@ -0,0 +1,13 @@ +package dev.ultreon.devices.forge.client; + +import dev.ultreon.devices.client.RenderRegistry; +import dev.architectury.registry.client.rendering.RenderTypeRegistry; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.level.block.Block; + +public class ForgeRenderRegistry extends RenderRegistry { + @Override + public void onRegister(Block block, RenderType renderType) { + RenderTypeRegistry.register(renderType, block); + } +} diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 000000000..535815f11 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,42 @@ +# Mods.toml for the devices mod by ultreon (originally created my MrCrayfish) +# Copyright (c) 2022 - Ultreon Team, GPLv3 License. See the license at https://www.gnu.org/licenses/gpl-3.0-standalone.html + +modLoader = "javafml" +loaderVersion = "[${loaderVersion},)" +license = "GPL-3.0" +issueTrackerURL = "https://github.com/Ultreon/devices-mod/issues" + +# The main mod, and all sub-mods. +[[mods]] +modId = "devices" +version = "${version}" +displayName = "Devices Mod" +#updateJSONURL="http://myurl.me/" +displayURL = "https://github.com/Ultreon/devices-mod" +logoFile="devices_mod.png" +credits = "Thanks to MrCrayfish for the idea and the original mod that was made in 1.12.2. Thank you to MinecraftDoodler for helping with textures. Thank you to lizterzapzap for the Devices Mod icon. Cheers to these people for donating during the development: Mastef Chief, Haunted Corpse, Jake Crowley, fabbe50, PlayDashGaming, jack jook, Hunstagamez, Techyy YT, MinecraftDoodler, Norge100YT, Cyberman2208, CreepergamingsMC" +authors = "XyperCode, Jab125" +description = "${description}" +itemIcon = "devices:red_laptop" + +# Dependencies for the main mod. +[[dependencies.devices]] +modId = "forge" +mandatory = true +versionRange = "[${forgeVersion},)" +ordering = "NONE" +side = "BOTH" + +[[dependencies.devices]] +modId = "minecraft" +mandatory = true +versionRange = "1.20.4" +ordering = "NONE" +side = "BOTH" + +[[dependencies.devices]] +modId = "architectury" +mandatory = true +versionRange = "[11,12)" +ordering = "NONE" +side = "BOTH" diff --git a/neoforge/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry b/neoforge/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry new file mode 100644 index 000000000..ade0fec66 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/services/dev.ultreon.devices.client.RenderRegistry @@ -0,0 +1 @@ +dev.ultreon.devices.forge.client.ForgeRenderRegistry \ No newline at end of file diff --git a/neoforge/src/main/resources/devices.mixins.json b/neoforge/src/main/resources/devices.mixins.json new file mode 100644 index 000000000..064b602d2 --- /dev/null +++ b/neoforge/src/main/resources/devices.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "dev.ultreon.devices.devices.mixin.forge", + "compatibilityLevel": "JAVA_17", + "mixins": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/neoforge/src/main/resources/devices_mod.png b/neoforge/src/main/resources/devices_mod.png new file mode 100644 index 000000000..6624851fd Binary files /dev/null and b/neoforge/src/main/resources/devices_mod.png differ diff --git a/neoforge/src/main/resources/pack.mcmeta b/neoforge/src/main/resources/pack.mcmeta new file mode 100644 index 000000000..e6b7f33f5 --- /dev/null +++ b/neoforge/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "devices resources", + "pack_format": 8 + } +} diff --git a/settings.gradle b/settings.gradle index 90beba93d..0af978f3d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,5 +10,8 @@ pluginManagement { include("common") include("fabric") include("forge") +include("neoforge") include("fabric-datagen-helper") -include("fabric-testmod") \ No newline at end of file +include("fabric-testmod") +include 'api' +