Skip to content
This repository was archived by the owner on Dec 16, 2025. It is now read-only.

Commit d7b390a

Browse files
committed
Fixed NeoForge side
1 parent 59ccc0c commit d7b390a

File tree

67 files changed

+204
-263
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+204
-263
lines changed

common/src/main/java/dev/ultreon/devices/BuiltinApps.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.ultreon.devices;
22

33
import dev.ultreon.devices.api.ApplicationManager;
4+
import dev.ultreon.devices.event.InitializationEvent;
45
import dev.ultreon.devices.programs.BoatRacersApp;
56
import dev.ultreon.devices.programs.NoteStashApp;
67
import dev.ultreon.devices.programs.PixelPainterApp;
@@ -14,7 +15,7 @@
1415
import net.minecraft.resources.ResourceLocation;
1516

1617
public class BuiltinApps {
17-
public static void registerBuiltinApps() {
18+
public static void registerBuiltinApps(InitializationEvent.AppRegistrationEvent ignored) {
1819
ApplicationManager.registerApplication(ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "diagnostics"), () -> DiagnosticsApp::new, true);
1920
ApplicationManager.registerApplication(ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "settings"), () -> SettingsApp::new, true);
2021
ApplicationManager.registerApplication(ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "file_browser"), () -> FileBrowserApp::new, true);

common/src/main/java/dev/ultreon/devices/Devices.java

Lines changed: 36 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import dev.ultreon.devices.api.print.PrintingManager;
1010
import dev.ultreon.devices.api.task.TaskManager;
1111
import dev.ultreon.devices.api.utils.OnlineRequest;
12-
import dev.ultreon.devices.block.PrinterBlock;
1312
import dev.ultreon.devices.core.ComputerScreen;
1413
import dev.ultreon.devices.client.ClientNotification;
1514
import dev.ultreon.devices.client.debug.ClientAppDebug;
@@ -20,6 +19,7 @@
2019
import dev.ultreon.devices.core.print.task.TaskPrint;
2120
import dev.ultreon.devices.core.task.TaskInstallApp;
2221
import dev.ultreon.devices.debug.DebugLog;
22+
import dev.ultreon.devices.event.InitializationEvent;
2323
import dev.ultreon.devices.event.WorldDataHandler;
2424
import dev.ultreon.devices.network.PacketHandler;
2525
import dev.ultreon.devices.network.task.SyncApplicationPacket;
@@ -52,22 +52,15 @@
5252
import dev.ultreon.mods.xinexlib.platform.XinexPlatform;
5353
import dev.ultreon.mods.xinexlib.registrar.RegistrarManager;
5454
import net.minecraft.client.Minecraft;
55-
import net.minecraft.core.BlockPos;
5655
import net.minecraft.core.MappedRegistry;
5756
import net.minecraft.nbt.CompoundTag;
5857
import net.minecraft.resources.ResourceKey;
5958
import net.minecraft.resources.ResourceLocation;
6059
import net.minecraft.server.MinecraftServer;
6160
import net.minecraft.server.level.ServerPlayer;
6261
import net.minecraft.server.packs.resources.ResourceManager;
63-
import net.minecraft.world.InteractionHand;
64-
import net.minecraft.world.InteractionResult;
65-
import net.minecraft.world.entity.player.Player;
6662
import net.minecraft.world.item.ItemStack;
67-
import net.minecraft.world.item.Items;
6863
import net.minecraft.world.item.crafting.RecipeType;
69-
import net.minecraft.world.level.Level;
70-
import net.minecraft.world.level.block.Block;
7164
import org.jetbrains.annotations.ApiStatus;
7265
import org.jetbrains.annotations.Nullable;
7366
import org.slf4j.Logger;
@@ -144,7 +137,9 @@ public void init() {
144137

145138
PacketHandler.init();
146139

147-
registerApplications();
140+
if (XinexPlatform.getPlatformName().equals(ModPlatform.Fabric)) {
141+
registerApplications();
142+
}
148143

149144
if (XinexPlatform.getPlatformName().equals(ModPlatform.Fabric)) {
150145
EnvExecutor.runInEnv(Env.CLIENT, () -> Devices::doClientInit);
@@ -159,7 +154,7 @@ public void init() {
159154
}
160155
}
161156

162-
protected static void doClientInit() {
157+
public static void doClientInit() {
163158
ClientAppDebug.register();
164159
ClientModEvents.clientSetup(); //todo
165160
Devices.setupSiteRegistrations();
@@ -171,6 +166,7 @@ public static void preInit() {
171166
throw new LaunchException();
172167
}
173168

169+
EventSystem.MAIN.on(InitializationEvent.AppRegistrationEvent.class, BuiltinApps::registerBuiltinApps);
174170
DeviceConfig.init();
175171
}
176172

@@ -196,48 +192,47 @@ public void loadComplete() {
196192
}
197193

198194

199-
private void registerApplications() {
195+
public void registerApplications() {
200196
// Applications (Both)
201-
registerApplicationEvent();
202-
197+
EventSystem.MAIN.publish(new InitializationEvent.AppRegistrationEvent(this));
203198
// Core
204-
TaskManager.registerTask(TaskUpdateApplicationData::new);
205-
TaskManager.registerTask(TaskPrint::new);
206-
TaskManager.registerTask(TaskUpdateSystemData::new);
207-
TaskManager.registerTask(TaskConnect::new);
208-
TaskManager.registerTask(TaskPing::new);
209-
TaskManager.registerTask(TaskGetDevices::new);
199+
TaskManager.registerTask("update_application_data", TaskUpdateApplicationData::new, TaskUpdateApplicationData.class);
200+
TaskManager.registerTask("print", TaskPrint::new, TaskPrint.class);
201+
TaskManager.registerTask("update_system_data", TaskUpdateSystemData::new, TaskUpdateSystemData.class);
202+
TaskManager.registerTask("connect", TaskConnect::new, TaskConnect.class);
203+
TaskManager.registerTask("ping", TaskPing::new, TaskPing.class);
204+
TaskManager.registerTask("get_devices", TaskGetDevices::new, TaskGetDevices.class);
210205

211206
// File browser
212-
TaskManager.registerTask(TaskSendAction::new);
213-
TaskManager.registerTask(TaskSetupFileBrowser::new);
214-
TaskManager.registerTask(TaskGetFiles::new);
215-
TaskManager.registerTask(TaskGetMainDrive::new);
207+
TaskManager.registerTask("send_action", TaskSendAction::new, TaskSendAction.class);
208+
TaskManager.registerTask("setup_file_browser", TaskSetupFileBrowser::new, TaskSetupFileBrowser.class);
209+
TaskManager.registerTask("get_files", TaskGetFiles::new, TaskGetFiles.class);
210+
TaskManager.registerTask("get_main_drive", TaskGetMainDrive::new, TaskGetMainDrive.class);
216211

217212
// App Store
218-
TaskManager.registerTask(TaskInstallApp::new);
213+
TaskManager.registerTask("install_app", TaskInstallApp::new, TaskInstallApp.class);
219214

220215
// Ender Mail
221-
TaskManager.registerTask(TaskUpdateInbox::new);
222-
TaskManager.registerTask(TaskSendEmail::new);
223-
TaskManager.registerTask(TaskCheckEmailAccount::new);
224-
TaskManager.registerTask(TaskRegisterEmailAccount::new);
225-
TaskManager.registerTask(TaskDeleteEmail::new);
226-
TaskManager.registerTask(TaskViewEmail::new);
216+
TaskManager.registerTask("update_inbox", TaskUpdateInbox::new, TaskUpdateInbox.class);
217+
TaskManager.registerTask("send_email", TaskSendEmail::new, TaskSendEmail.class);
218+
TaskManager.registerTask("check_email_account", TaskCheckEmailAccount::new, TaskCheckEmailAccount.class);
219+
TaskManager.registerTask("register_email_account", TaskRegisterEmailAccount::new, TaskRegisterEmailAccount.class);
220+
TaskManager.registerTask("delete_email", TaskDeleteEmail::new, TaskDeleteEmail.class);
221+
TaskManager.registerTask("view_email", TaskViewEmail::new, TaskViewEmail.class);
227222

228223
if (XinexPlatform.isDevelopmentEnvironment() || Devices.EARLY_CONFIG.enableBetaApps) {
229224
// Auction
230-
TaskManager.registerTask(TaskAddAuction::new);
231-
TaskManager.registerTask(TaskGetAuctions::new);
232-
TaskManager.registerTask(TaskBuyItem::new);
225+
TaskManager.registerTask("add_auction", TaskAddAuction::new, TaskAddAuction.class);
226+
TaskManager.registerTask("get_auctions", TaskGetAuctions::new, TaskGetAuctions.class);
227+
TaskManager.registerTask("buy_item", TaskBuyItem::new, TaskBuyItem.class);
233228

234229
// Bank
235-
TaskManager.registerTask(TaskDeposit::new);
236-
TaskManager.registerTask(TaskWithdraw::new);
237-
TaskManager.registerTask(TaskGetBalance::new);
238-
TaskManager.registerTask(TaskPay::new);
239-
TaskManager.registerTask(TaskAdd::new);
240-
TaskManager.registerTask(TaskRemove::new);
230+
TaskManager.registerTask("deposit", TaskDeposit::new, TaskDeposit.class);
231+
TaskManager.registerTask("withdraw", TaskWithdraw::new, TaskWithdraw.class);
232+
TaskManager.registerTask("get_balance", TaskGetBalance::new, TaskGetBalance.class);
233+
TaskManager.registerTask("pay", TaskPay::new, TaskPay.class);
234+
TaskManager.registerTask("add", TaskAdd::new, TaskAdd.class);
235+
TaskManager.registerTask("remove", TaskRemove::new, TaskRemove.class);
241236
}
242237

243238
if (XinexPlatform.isDevelopmentEnvironment() || Devices.EARLY_CONFIG.enableDebugApps) {
@@ -247,16 +242,14 @@ private void registerApplications() {
247242
ApplicationManager.registerApplication(ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "text_area"), () -> TextAreaApp::new, false);
248243
ApplicationManager.registerApplication(ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "test"), () -> TestApp::new, false);
249244

250-
TaskManager.registerTask(TaskNotificationTest::new);
245+
TaskManager.registerTask("notification_test", TaskNotificationTest::new, TaskNotificationTest.class);
251246
}
252247

253248
EnvExecutor.runInEnv(Env.CLIENT, () -> () -> PrintingManager.registerPrint(ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "picture"), PixelPainterApp.PicturePrint.class));
254249
}
255250

256251
public abstract int getBurnTime(ItemStack stack, RecipeType<?> type);
257252

258-
protected abstract void registerApplicationEvent();
259-
260253
protected List<Application> loadApps() {
261254
if (apps != null) {
262255
return apps;
@@ -303,7 +296,7 @@ public Application registerApplication(ResourceLocation identifier, ApplicationS
303296
AtomicReference<Application> application = new AtomicReference<>(null);
304297
EnvExecutor.runInEnv(Env.CLIENT, () -> () -> {
305298
Application theAppWeGot = app.get().get();
306-
List<Application> apps = loadApps(); /*ObfuscationReflectionHelper.getPrivateValue(Laptop.class, null, "APPLICATIONS");*/
299+
List<Application> apps = loadApps();
307300
assert apps != null;
308301
apps.add(theAppWeGot);
309302

common/src/main/java/dev/ultreon/devices/DevicesEarlyConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/// Devices mod early configuration.
77
/// This is used to configure devices mod early, when the NeoForge config isn't loaded yet.
88
///
9-
/// @author <a href="https://github.com/XyperCode">Qubilux</a>
9+
/// @author <a href="https://github.com/Qubilux">Qubix</a>
1010
public class DevicesEarlyConfig {
1111
private static final File FILE = Path.of("config").resolve("devices-early-config.json").toFile();
1212
public boolean enableBetaApps = false;

common/src/main/java/dev/ultreon/devices/api/ApplicationManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private ApplicationManager() {
3737
@Nullable
3838
public static Application registerApplication(ResourceLocation identifier, Supplier<Supplier<Application>> app, boolean isSystem) {
3939
Devices.LOGGER.debug(MARKER, "Registering application {}", identifier);
40-
@SuppressWarnings("deprecation")
40+
4141
Application application = Devices.getInstance().registerApplication(identifier, new Devices.ApplicationSupplier() {
4242
@Override
4343
public Supplier<Application> get() {

common/src/main/java/dev/ultreon/devices/api/print/IPrint.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
/// Used for the printer.
1414
/// Uses ink sacks and paper.
1515
///
16-
/// @author [MrCrayfish](https://github.com/MrCrayfish), [Qubilux](https://github.com/XyperCode)
16+
/// @author [MrCrayfish](https://github.com/MrCrayfish), [Qubix](https://github.com/Qubilux)
1717
public interface IPrint {
1818
static CompoundTag save(IPrint print) {
1919
CompoundTag tag = new CompoundTag();

common/src/main/java/dev/ultreon/devices/api/task/Task.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@
2323
* @author MrCrayfish
2424
*/
2525
public abstract class Task {
26-
private String name;
2726
private Callback<CompoundTag> callback = null;
2827
private boolean success = false;
2928

30-
public Task(String name) {
31-
this.name = name;
29+
public Task() {
3230
}
3331

3432
/**
@@ -61,24 +59,16 @@ public final void callback(CompoundTag tag) {
6159
*/
6260
public final void setSuccessful() {
6361
if (this instanceof TaskInstallApp) DebugLog.log("Setting successful...");
64-
this.success = true;
62+
success = true;
6563
}
6664

6765
/**
6866
* Gets if this Task produced the correct results.
6967
*
7068
* @return if this task was successful
7169
*/
72-
public final boolean isSucessful() {
73-
return this.success;
74-
}
75-
76-
/**
77-
* Sets the task as complete and resets success to false.
78-
* This is used for the core.
79-
*/
80-
public final void complete() {
81-
this.success = false;
70+
public final boolean isSuccessful() {
71+
return success;
8272
}
8373

8474
/**
@@ -87,7 +77,7 @@ public final void complete() {
8777
* @return the Task name
8878
*/
8979
public final String getName() {
90-
return this.name;
80+
return TaskManager.getTaskName(this);
9181
}
9282

9383
/**
@@ -129,6 +119,6 @@ public final String getName() {
129119
public abstract void processResponse(HolderLookup.Provider provider, CompoundTag tag);
130120

131121
public void setName(String name) {
132-
this.name = name;
122+
133123
}
134124
}

common/src/main/java/dev/ultreon/devices/api/task/TaskManager.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77

88
import java.util.HashMap;
99
import java.util.Map;
10+
import java.util.concurrent.ConcurrentHashMap;
1011
import java.util.function.Supplier;
1112

1213
public final class TaskManager {
1314
private static TaskManager instance = null;
1415

15-
private final Map<String, Task> registeredRequests = new HashMap<>();
16-
private final Map<Integer, Task> requests = new HashMap<>();
16+
private final Map<Class<?>, String> taskTypeMap = new HashMap<>();
17+
private final Map<String, Supplier<Task>> registeredRequests = new HashMap<>();
18+
private final Map<Integer, Task> requests = new ConcurrentHashMap<>();
1719
private int currentId = 0;
1820

1921
private TaskManager() {
@@ -26,33 +28,45 @@ private static TaskManager get() {
2628
return instance;
2729
}
2830

29-
public static void registerTask(Supplier<Task> clazz) {
30-
var task = clazz.get();
31+
public static void registerTask(String name, Supplier<Task> factory, Class<? extends Task> type) {
3132
try {
32-
Devices.LOGGER.info("Registering task '{}'", task.getName());
33-
get().registeredRequests.put(task.getName(), task);
33+
if (get().registeredRequests.containsKey(name))
34+
throw new RuntimeException("Task '" + name + "' is already registered!");
35+
36+
Devices.LOGGER.info("Registering task '{}'", name);
37+
get().registeredRequests.put(name, factory);
38+
get().taskTypeMap.put(type, name);
3439
} catch (Exception e) {
3540
Devices.LOGGER.error("Failed to register task:", e);
3641
}
3742
}
3843

3944
public static void sendTask(Task task) {
4045
TaskManager manager = get();
41-
if (!manager.registeredRequests.containsKey(task.getName())) {
46+
String key = get().taskTypeMap.get(task.getClass());
47+
if (key == null)
48+
throw new RuntimeException("Unregistered Task: " + task.getClass().getName() + ". Use TaskManager#registerTask to register your task.");
49+
if (!manager.registeredRequests.containsKey(key)) {
4250
throw new RuntimeException("Unregistered Task: " + task.getClass().getName() + ". Use TaskManager#requestRequest to register your task.");
4351
}
4452

4553
int requestId = manager.currentId++;
54+
if (manager.requests.containsKey(requestId))
55+
Devices.LOGGER.warn("Request ID collision! Request ID: {}", requestId, new Throwable());
4656
manager.requests.put(requestId, task);
4757
if (Minecraft.getInstance().getConnection() != null)
4858
PacketHandler.sendToServer(new RequestPacket(requestId, task));
4959
}
5060

51-
public static Task getTask(String name) {
61+
public static Supplier<Task> getTask(String name) {
5262
return get().registeredRequests.get(name);
5363
}
5464

5565
public static Task getTaskAndRemove(int id) {
5666
return get().requests.remove(id);
5767
}
68+
69+
public static String getTaskName(Task task) {
70+
return get().taskTypeMap.get(task.getClass());
71+
}
5872
}

common/src/main/java/dev/ultreon/devices/block/RouterBlock.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
/// # Router (Block)
2525
/// The block for the router device.
2626
///
27-
/// @author [MrCrayfish](https://github.com/MrCrayfish), [Qubilux](https://github.com/XyperCode)
27+
/// @author [MrCrayfish](https://github.com/MrCrayfish), [Qubix](https://github.com/Qubilux)
2828
/// @see RouterBlockEntity
2929
public class RouterBlock extends DeviceBlock.Colored {
3030
public static final MapCodec<RouterBlock> CODEC = simpleCodec(RouterBlock::new);

common/src/main/java/dev/ultreon/devices/block/computer/MacMaxXBlock.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import org.jetbrains.annotations.NotNull;
3333
import org.jetbrains.annotations.Nullable;
3434

35-
/// @author Qubilux
35+
/// @author Qubix
3636
public class MacMaxXBlock extends ComputerBlock {
3737
private static final MapCodec<MacMaxXBlock> CODEC = simpleCodec(MacMaxXBlock::new);
3838

common/src/main/java/dev/ultreon/devices/block/computer/MacMaxXBlockPart.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import net.minecraft.world.phys.shapes.VoxelShape;
2323
import org.jetbrains.annotations.NotNull;
2424

25-
/// @author Qubilux
25+
/// @author Qubix
2626
public class MacMaxXBlockPart extends HorizontalDirectionalBlock {
2727
public static final MapCodec<MacMaxXBlockPart> CODEC = simpleCodec(MacMaxXBlockPart::new);
2828
public static final EnumProperty<Part> PART = EnumProperty.create("part", Part.class);

0 commit comments

Comments
 (0)