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 extends Application> 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 exte
@Environment(EnvType.CLIENT)
public boolean registerPrint(ResourceLocation identifier, Class extends IPrint> classPrint) {
- LOGGER.debug("Registering print: " + identifier.toString());
+ DebugLog.log("Registering print: %s", identifier.toString());
try {
Constructor extends IPrint> constructor = classPrint.getConstructor();
@@ -328,20 +324,19 @@ public boolean registerPrint(ResourceLocation identifier, Class extends IPrint
Class extends IPrint.Renderer> 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 extends T> 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 extends T> 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 super T> 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 super T> 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 extends Renderer> 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 extends IPrint> 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 extends HorizontalDirectionalBlock> 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 extends MacMaxXBlock> 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 extends HorizontalDirectionalBlock> 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 extends HorizontalDirectionalBlock> 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 extends ComputerBlockEntity> type, BlockPos pWorldPosition, BlockState pBlockState) {
super(type, pWorldPosition, pBlockState);
@@ -40,49 +35,19 @@ protected ComputerBlockEntity(BlockEntityType extends ComputerBlockEntity> 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