Skip to content

Commit 97f9bed

Browse files
committed
remove any usage of +TableUnsafe since they can't be used from the main thread
1 parent c5acca4 commit 97f9bed

7 files changed

Lines changed: 33 additions & 50 deletions

File tree

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/MEBridgePeripheral.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ public final MethodResult getItems(IArguments arguments) throws LuaException {
227227
if (!isAvailable())
228228
return notConnected(null);
229229

230-
Pair<ItemFilter, String> filter = ItemFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
230+
Pair<ItemFilter, String> filter = ItemFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
231231
if (filter.rightPresent())
232232
return MethodResult.of(null, filter.getRight());
233233

@@ -242,7 +242,7 @@ public final MethodResult getFluids(IArguments arguments) throws LuaException {
242242
if (!isAvailable())
243243
return notConnected(null);
244244

245-
Pair<FluidFilter, String> filter = FluidFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
245+
Pair<FluidFilter, String> filter = FluidFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
246246
if (filter.rightPresent())
247247
return MethodResult.of(null, filter.getRight());
248248

@@ -260,7 +260,7 @@ public MethodResult getChemicals(IArguments arguments) throws LuaException {
260260
if (!APAddon.APP_MEKANISTICS.isLoaded())
261261
return MethodResult.of(null, StatusConstants.ADDON_NOT_LOADED.withInfo(APAddon.APP_MEKANISTICS.name()));
262262

263-
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
263+
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
264264
if (filter.rightPresent())
265265
return MethodResult.of(null, filter.getRight());
266266

@@ -275,7 +275,7 @@ public final MethodResult getCraftableItems(IArguments arguments) throws LuaExce
275275
if (!isAvailable())
276276
return notConnected(null);
277277

278-
Pair<ItemFilter, String> filter = ItemFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
278+
Pair<ItemFilter, String> filter = ItemFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
279279
if (filter.rightPresent())
280280
return MethodResult.of(null, filter.getRight());
281281

@@ -290,7 +290,7 @@ public final MethodResult getCraftableFluids(IArguments arguments) throws LuaExc
290290
if (!isAvailable())
291291
return notConnected(null);
292292

293-
Pair<FluidFilter, String> filter = FluidFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
293+
Pair<FluidFilter, String> filter = FluidFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
294294
if (filter.rightPresent())
295295
return MethodResult.of(null, filter.getRight());
296296

@@ -307,7 +307,7 @@ public MethodResult getCraftableChemicals(IArguments arguments) throws LuaExcept
307307
if (!APAddon.APP_MEKANISTICS.isLoaded())
308308
return MethodResult.of(null, StatusConstants.ADDON_NOT_LOADED.withInfo(APAddon.APP_MEKANISTICS.name()));
309309

310-
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
310+
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
311311
if (filter.rightPresent())
312312
return MethodResult.of(null, filter.getRight());
313313

@@ -443,13 +443,12 @@ public MethodResult getPatterns(IArguments arguments) throws LuaException {
443443

444444
// Expected input is a table with either an input table, an output table or both to filter for both
445445
// If no table is provided or it's empty, return every pattern
446-
Optional<LuaTable<?, ?>> optFilter = arguments.optTableUnsafe(0);
447-
if (optFilter.isEmpty()) {
446+
LuaTable<?, ?> filterTable = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
447+
448+
if (filterTable.isEmpty()) {
448449
return MethodResult.of(AEApi.listPatterns(node.getGrid(), getLevel()));
449450
}
450451

451-
LuaTable<?, ?> filterTable = optFilter.get();
452-
453452
boolean hasInputFilter = filterTable.containsKey("input");
454453
boolean hasOutputFilter = filterTable.containsKey("output");
455454
boolean hasAnyFilter = hasInputFilter || hasOutputFilter;

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/RSBridgePeripheral.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public final MethodResult getItems(IArguments arguments) throws LuaException {
251251
if (!isAvailable())
252252
return notConnected(null);
253253

254-
Pair<ItemFilter, String> filter = ItemFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
254+
Pair<ItemFilter, String> filter = ItemFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
255255
if (filter.rightPresent())
256256
return MethodResult.of(null, filter.getRight());
257257

@@ -268,7 +268,7 @@ public final MethodResult getFluids(IArguments arguments) throws LuaException {
268268
if (!isAvailable())
269269
return notConnected(null);
270270

271-
Pair<FluidFilter, String> filter = FluidFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
271+
Pair<FluidFilter, String> filter = FluidFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
272272
if (filter.rightPresent())
273273
return MethodResult.of(null, filter.getRight());
274274

@@ -288,7 +288,7 @@ public final MethodResult getChemicals(IArguments arguments) throws LuaException
288288
if (!APAddon.REFINEDSTORAGE_MEKANISM.isLoaded())
289289
return MethodResult.of(null, StatusConstants.ADDON_NOT_LOADED.withInfo("RS_MEKANISM"));
290290

291-
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
291+
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
292292
if (filter.rightPresent())
293293
return MethodResult.of(null, filter.getRight());
294294

@@ -305,7 +305,7 @@ public final MethodResult getCraftableItems(IArguments arguments) throws LuaExce
305305
if (!isAvailable())
306306
return notConnected(null);
307307

308-
Pair<ItemFilter, String> filter = ItemFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
308+
Pair<ItemFilter, String> filter = ItemFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
309309
if (filter.rightPresent())
310310
return MethodResult.of(null, filter.getRight());
311311

@@ -322,7 +322,7 @@ public final MethodResult getCraftableFluids(IArguments arguments) throws LuaExc
322322
if (!isAvailable())
323323
return notConnected(null);
324324

325-
Pair<FluidFilter, String> filter = FluidFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
325+
Pair<FluidFilter, String> filter = FluidFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
326326
if (filter.rightPresent())
327327
return MethodResult.of(null, filter.getRight());
328328

@@ -342,7 +342,7 @@ public final MethodResult getCraftableChemicals(IArguments arguments) throws Lua
342342
if (!APAddon.REFINEDSTORAGE_MEKANISM.isLoaded())
343343
return MethodResult.of(null, StatusConstants.ADDON_NOT_LOADED.withInfo(APAddon.REFINEDSTORAGE_MEKANISM));
344344

345-
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(arguments.optTableUnsafe(0).orElse(EmptyLuaTable.INSTANCE));
345+
Pair<ChemicalFilter, String> filter = ChemicalFilter.parse(EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null)));
346346
if (filter.rightPresent())
347347
return MethodResult.of(null, filter.getRight());
348348

@@ -828,13 +828,11 @@ public final MethodResult getPatterns(IArguments arguments) throws LuaException
828828

829829
// Expected input is a table with either an input table, an output table or both to filter for both
830830
// If no table is provided or it's empty, return every pattern
831-
Optional<LuaTable<?, ?>> optFilter = arguments.optTableUnsafe(0);
832-
if (optFilter.isEmpty()) {
831+
LuaTable<?, ?> filterTable = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
832+
if (filterTable.isEmpty()) {
833833
return MethodResult.of(RSApi.getPatterns(getNetwork()));
834834
}
835835

836-
LuaTable<?, ?> filterTable = optFilter.get();
837-
838836
boolean hasInputFilter = filterTable.containsKey("input");
839837
boolean hasOutputFilter = filterTable.containsKey("output");
840838
boolean hasAnyFilter = hasInputFilter || hasOutputFilter;

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataBlockHandPlugin.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,7 @@ public AutomataBlockHandPlugin(AutomataCorePeripheral automataCore) {
5858

5959
@LuaFunction(mainThread = true)
6060
public final MethodResult digBlock(@NotNull IArguments arguments) throws LuaException {
61-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
62-
LuaTable<?, ?> options = EmptyLuaTable.INSTANCE;
63-
if (optOptions.isPresent())
64-
options = optOptions.get();
61+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
6562

6663
boolean sneak = options.optBoolean("sneak").orElse(false);
6764
float yaw = options.optDouble("yaw").orElse(0d).floatValue();
@@ -84,10 +81,7 @@ public final MethodResult digBlock(@NotNull IArguments arguments) throws LuaExce
8481

8582
@LuaFunction(mainThread = true)
8683
public final MethodResult useOnBlock(@NotNull IArguments arguments) throws LuaException {
87-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
88-
LuaTable<?, ?> options = EmptyLuaTable.INSTANCE;
89-
if (optOptions.isPresent())
90-
options = optOptions.get();
84+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
9185

9286
boolean sneak = options.optBoolean("sneak").orElse(false);
9387
float yaw = options.optDouble("yaw").orElse(0d).floatValue();
@@ -121,8 +115,7 @@ public final MethodResult useOnBlock(@NotNull IArguments arguments) throws LuaEx
121115
*/
122116
@LuaFunction(mainThread = true)
123117
public MethodResult placeBlock(@NotNull IArguments arguments) throws LuaException {
124-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
125-
final LuaTable<?, ?> options = optOptions.orElse(EmptyLuaTable.INSTANCE);
118+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
126119

127120
ITurtleAccess turtle = automataCore.getPeripheralOwner().getTurtle();
128121
CompassPeripheral compassPeripheral = Stream.of(TurtleSide.values()).map(side -> turtle.getPeripheral(side) instanceof CompassPeripheral compass ? compass : null).filter(peripheral -> peripheral != null).findFirst().orElse(null);

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataEntityHandPlugin.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ public AutomataEntityHandPlugin(AutomataCorePeripheral automataCore, Predicate<E
4545

4646
@LuaFunction(mainThread = true)
4747
public final MethodResult useOnAnimal(@NotNull IArguments arguments) throws LuaException {
48-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
49-
LuaTable<?, ?> options = EmptyLuaTable.INSTANCE;
50-
if (optOptions.isPresent())
51-
options = optOptions.get();
48+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
5249

5350
boolean sneak = options.optBoolean("sneak").orElse(false);
5451
float yaw = options.optDouble("yaw").orElse(0d).floatValue();
@@ -68,10 +65,7 @@ public final MethodResult useOnAnimal(@NotNull IArguments arguments) throws LuaE
6865

6966
@LuaFunction(mainThread = true)
7067
public final MethodResult inspectAnimal(@NotNull IArguments arguments) throws LuaException {
71-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
72-
LuaTable<?, ?> options = EmptyLuaTable.INSTANCE;
73-
if (optOptions.isPresent())
74-
options = optOptions.get();
68+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
7569

7670
boolean sneak = options.optBoolean("sneak").orElse(false);
7771
float yaw = options.optDouble("yaw").orElse(0d).floatValue();

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataEntityTransferPlugin.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,7 @@ protected Entity extractEntity() {
8484

8585
@LuaFunction(mainThread = true)
8686
public final MethodResult captureAnimal(@NotNull IArguments arguments) throws LuaException {
87-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
88-
LuaTable<?, ?> options = EmptyLuaTable.INSTANCE;
89-
if (optOptions.isPresent())
90-
options = optOptions.get();
87+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
9188

9289
float yaw = options.optDouble("yaw").orElse(0d).floatValue();
9390
float pitch = options.optDouble( "pitch").orElse(0d).floatValue();

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataLookPlugin.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@ public AutomataLookPlugin(AutomataCorePeripheral automataCore) {
3030

3131
@LuaFunction(mainThread = true)
3232
public final MethodResult lookAtBlock(@NotNull IArguments arguments) throws LuaException {
33-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
34-
LuaTable<?, ?> options = EmptyLuaTable.INSTANCE;
35-
if (optOptions.isPresent())
36-
options = optOptions.get();
33+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
3734

3835
float yaw = options.optDouble("yaw").orElse(0d).floatValue();
3936
float pitch = options.optDouble( "pitch").orElse(0d).floatValue();
@@ -56,10 +53,7 @@ public final MethodResult lookAtBlock(@NotNull IArguments arguments) throws LuaE
5653

5754
@LuaFunction(mainThread = true)
5855
public final MethodResult lookAtEntity(@NotNull IArguments arguments) throws LuaException {
59-
Optional<LuaTable<?, ?>> optOptions = arguments.optTableUnsafe(0);
60-
LuaTable<?, ?> options = EmptyLuaTable.INSTANCE;
61-
if (optOptions.isPresent())
62-
options = optOptions.get();
56+
LuaTable<?, ?> options = EmptyLuaTable.orEmpty(arguments.optTable(0).orElse(null));
6357

6458
float yaw = options.optDouble("yaw").orElse(0d).floatValue();
6559
float pitch = options.optDouble( "pitch").orElse(0d).floatValue();

src/main/java/de/srendi/advancedperipherals/common/util/EmptyLuaTable.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package de.srendi.advancedperipherals.common.util;
22

33
import dan200.computercraft.api.lua.LuaTable;
4+
import dan200.computercraft.api.lua.ObjectLuaTable;
45
import org.jetbrains.annotations.NotNull;
56
import org.jetbrains.annotations.Nullable;
67

78
import java.util.Collection;
89
import java.util.List;
10+
import java.util.Map;
911
import java.util.Set;
1012

1113
public class EmptyLuaTable implements LuaTable<Object, Object> {
@@ -55,4 +57,10 @@ public Collection<Object> values() {
5557
public Set<Entry<Object, Object>> entrySet() {
5658
return Set.of();
5759
}
60+
61+
public static LuaTable<Object, Object> orEmpty(@Nullable Map<?, ?> table) {
62+
if (table == null)
63+
return INSTANCE;
64+
return new ObjectLuaTable(table);
65+
}
5866
}

0 commit comments

Comments
 (0)