diff --git a/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java b/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java
index dfe3f9dfa..2bd97ad28 100644
--- a/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java
+++ b/projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java
@@ -44,12 +44,12 @@ public static > void serializeToNetwork(FriendlyByteBu
@SuppressWarnings("unchecked")
private static , T extends ArgumentTypeInfo.Template> void serializeToNetwork(FriendlyByteBuf buffer, ArgumentTypeInfo type, ArgumentTypeInfo.Template template) {
- RegistryWrappers.writeId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES, type);
+ buffer.writeId(RegistryWrappers.COMMAND_ARGUMENT_TYPES, type);
type.serializeToNetwork((T) template, buffer);
}
public static ArgumentTypeInfo.Template> deserialize(FriendlyByteBuf buffer) {
- var type = RegistryWrappers.readId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES);
+ var type = buffer.readById(RegistryWrappers.COMMAND_ARGUMENT_TYPES);
Objects.requireNonNull(type, "Unknown argument type");
return type.deserializeFromNetwork(buffer);
}
diff --git a/projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java b/projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java
index 741aa7206..59460572e 100644
--- a/projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java
+++ b/projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java
@@ -5,6 +5,7 @@
package dan200.computercraft.shared.platform;
import net.minecraft.commands.synchronization.ArgumentTypeInfo;
+import net.minecraft.core.IdMap;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.FriendlyByteBuf;
@@ -36,9 +37,7 @@ public final class RegistryWrappers {
public static final RegistryWrapper> RECIPE_SERIALIZERS = PlatformHelper.get().wrap(Registries.RECIPE_SERIALIZER);
public static final RegistryWrapper> MENU = PlatformHelper.get().wrap(Registries.MENU);
- public interface RegistryWrapper extends Iterable {
- int getId(T object);
-
+ public interface RegistryWrapper extends IdMap {
ResourceLocation getKey(T object);
T get(ResourceLocation location);
@@ -46,8 +45,6 @@ public interface RegistryWrapper extends Iterable {
@Nullable
T tryGet(ResourceLocation location);
- T get(int id);
-
default Stream stream() {
return StreamSupport.stream(spliterator(), false);
}
@@ -56,15 +53,6 @@ default Stream stream() {
private RegistryWrappers() {
}
- public static void writeId(FriendlyByteBuf buf, RegistryWrapper registry, K object) {
- buf.writeVarInt(registry.getId(object));
- }
-
- public static K readId(FriendlyByteBuf buf, RegistryWrapper registry) {
- var id = buf.readVarInt();
- return registry.get(id);
- }
-
public static void writeKey(FriendlyByteBuf buf, RegistryWrapper registry, K object) {
buf.writeResourceLocation(registry.getKey(object));
}
diff --git a/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java b/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java
index dc3443879..4d5f144db 100644
--- a/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java
+++ b/projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java
@@ -17,6 +17,8 @@
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
+import java.util.Objects;
+
public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser {
public static final TurtleToolSerialiser INSTANCE = new TurtleToolSerialiser();
@@ -44,7 +46,8 @@ public TurtleTool fromJson(ResourceLocation id, JsonObject object) {
@Override
public TurtleTool fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) {
var adjective = buffer.readUtf();
- var craftingItem = RegistryWrappers.readId(buffer, RegistryWrappers.ITEMS);
+ var craftingItem = buffer.readById(RegistryWrappers.ITEMS);
+ Objects.requireNonNull(craftingItem, "Unknown crafting item");
var toolItem = buffer.readItem();
// damageMultiplier and breakable aren't used by the client, but we need to construct the upgrade exactly
// as otherwise syncing on an SP world will overwrite the (shared) upgrade registry with an invalid upgrade!
@@ -59,7 +62,7 @@ public TurtleTool fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) {
@Override
public void toNetwork(FriendlyByteBuf buffer, TurtleTool upgrade) {
buffer.writeUtf(upgrade.getUnlocalisedAdjective());
- RegistryWrappers.writeId(buffer, RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem());
+ buffer.writeId(RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem());
buffer.writeItem(upgrade.item);
buffer.writeFloat(upgrade.damageMulitiplier);
buffer.writeBoolean(upgrade.allowEnchantments);
diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java
index 3c0ee5318..d3bf8a9c6 100644
--- a/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java
+++ b/projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java
@@ -303,7 +303,7 @@ public ServerPlayer createFakePlayer(ServerLevel world, GameProfile name) {
public boolean hasToolUsage(ItemStack stack) {
var item = stack.getItem();
return item instanceof ShovelItem || stack.is(ItemTags.SHOVELS) ||
- item instanceof HoeItem || stack.is(ItemTags.HOES);
+ item instanceof HoeItem || stack.is(ItemTags.HOES);
}
@Override
@@ -314,8 +314,8 @@ public InteractionResult canAttackEntity(ServerPlayer player, Entity entity) {
@Override
public boolean interactWithEntity(ServerPlayer player, Entity entity, Vec3 hitPos) {
return UseEntityCallback.EVENT.invoker().interact(player, entity.level, InteractionHand.MAIN_HAND, entity, new EntityHitResult(entity, hitPos)).consumesAction() ||
- entity.interactAt(player, hitPos.subtract(entity.position()), InteractionHand.MAIN_HAND).consumesAction() ||
- player.interactOn(entity, InteractionHand.MAIN_HAND).consumesAction();
+ entity.interactAt(player, hitPos.subtract(entity.position()), InteractionHand.MAIN_HAND).consumesAction() ||
+ player.interactOn(entity, InteractionHand.MAIN_HAND).consumesAction();
}
@Override
@@ -337,9 +337,7 @@ private record RegistryWrapperImpl(
) implements RegistryWrappers.RegistryWrapper {
@Override
public int getId(T object) {
- var id = registry.getId(object);
- if (id == -1) throw new IllegalArgumentException(object + " was not registered in " + name);
- return id;
+ return registry.getId(object);
}
@Override
@@ -363,10 +361,13 @@ public T tryGet(ResourceLocation location) {
}
@Override
- public T get(int id) {
- var object = registry.byId(id);
- if (object == null) throw new IllegalArgumentException(id + " was not registered in " + name);
- return object;
+ public @Nullable T byId(int id) {
+ return registry.byId(id);
+ }
+
+ @Override
+ public int size() {
+ return registry.size();
}
@Override
diff --git a/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java b/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java
index d7f3a74b3..361c11c1e 100644
--- a/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java
+++ b/projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java
@@ -359,9 +359,7 @@ private record RegistryWrapperImpl(
) implements RegistryWrappers.RegistryWrapper {
@Override
public int getId(T object) {
- var id = registry.getID(object);
- if (id == -1) throw new IllegalStateException(object + " was not registered in " + name);
- return id;
+ return registry.getID(object);
}
@Override
@@ -385,10 +383,13 @@ public T tryGet(ResourceLocation location) {
}
@Override
- public T get(int id) {
- var object = registry.getValue(id);
- if (object == null) throw new IllegalStateException(id + " was not registered in " + name);
- return object;
+ public @Nullable T byId(int id) {
+ return registry.getValue(id);
+ }
+
+ @Override
+ public int size() {
+ return registry.getKeys().size();
}
@Override