Skip to content

Commit 1b88213

Browse files
committed
Make our registry wrapper implement IdMap
This allows us to use some of the byte-buffer helper methods directly with our registries, rather than rolling our own helpers.
1 parent eef05b9 commit 1b88213

File tree

5 files changed

+28
-35
lines changed

5 files changed

+28
-35
lines changed

projects/common/src/main/java/dan200/computercraft/shared/command/arguments/ArgumentUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ public static <A extends ArgumentType<?>> void serializeToNetwork(FriendlyByteBu
4444

4545
@SuppressWarnings("unchecked")
4646
private static <A extends ArgumentType<?>, T extends ArgumentTypeInfo.Template<A>> void serializeToNetwork(FriendlyByteBuf buffer, ArgumentTypeInfo<A, T> type, ArgumentTypeInfo.Template<A> template) {
47-
RegistryWrappers.writeId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES, type);
47+
buffer.writeId(RegistryWrappers.COMMAND_ARGUMENT_TYPES, type);
4848
type.serializeToNetwork((T) template, buffer);
4949
}
5050

5151
public static ArgumentTypeInfo.Template<?> deserialize(FriendlyByteBuf buffer) {
52-
var type = RegistryWrappers.readId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES);
52+
var type = buffer.readById(RegistryWrappers.COMMAND_ARGUMENT_TYPES);
5353
Objects.requireNonNull(type, "Unknown argument type");
5454
return type.deserializeFromNetwork(buffer);
5555
}

projects/common/src/main/java/dan200/computercraft/shared/platform/RegistryWrappers.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package dan200.computercraft.shared.platform;
66

77
import net.minecraft.commands.synchronization.ArgumentTypeInfo;
8+
import net.minecraft.core.IdMap;
89
import net.minecraft.core.Registry;
910
import net.minecraft.core.registries.Registries;
1011
import net.minecraft.network.FriendlyByteBuf;
@@ -36,18 +37,14 @@ public final class RegistryWrappers {
3637
public static final RegistryWrapper<RecipeSerializer<?>> RECIPE_SERIALIZERS = PlatformHelper.get().wrap(Registries.RECIPE_SERIALIZER);
3738
public static final RegistryWrapper<MenuType<?>> MENU = PlatformHelper.get().wrap(Registries.MENU);
3839

39-
public interface RegistryWrapper<T> extends Iterable<T> {
40-
int getId(T object);
41-
40+
public interface RegistryWrapper<T> extends IdMap<T> {
4241
ResourceLocation getKey(T object);
4342

4443
T get(ResourceLocation location);
4544

4645
@Nullable
4746
T tryGet(ResourceLocation location);
4847

49-
T get(int id);
50-
5148
default Stream<T> stream() {
5249
return StreamSupport.stream(spliterator(), false);
5350
}
@@ -56,15 +53,6 @@ default Stream<T> stream() {
5653
private RegistryWrappers() {
5754
}
5855

59-
public static <K> void writeId(FriendlyByteBuf buf, RegistryWrapper<K> registry, K object) {
60-
buf.writeVarInt(registry.getId(object));
61-
}
62-
63-
public static <K> K readId(FriendlyByteBuf buf, RegistryWrapper<K> registry) {
64-
var id = buf.readVarInt();
65-
return registry.get(id);
66-
}
67-
6856
public static <K> void writeKey(FriendlyByteBuf buf, RegistryWrapper<K> registry, K object) {
6957
buf.writeResourceLocation(registry.getKey(object));
7058
}

projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleToolSerialiser.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import net.minecraft.world.item.ItemStack;
1818
import net.minecraft.world.level.block.Block;
1919

20+
import java.util.Objects;
21+
2022
public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<TurtleTool> {
2123
public static final TurtleToolSerialiser INSTANCE = new TurtleToolSerialiser();
2224

@@ -44,7 +46,8 @@ public TurtleTool fromJson(ResourceLocation id, JsonObject object) {
4446
@Override
4547
public TurtleTool fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) {
4648
var adjective = buffer.readUtf();
47-
var craftingItem = RegistryWrappers.readId(buffer, RegistryWrappers.ITEMS);
49+
var craftingItem = buffer.readById(RegistryWrappers.ITEMS);
50+
Objects.requireNonNull(craftingItem, "Unknown crafting item");
4851
var toolItem = buffer.readItem();
4952
// damageMultiplier and breakable aren't used by the client, but we need to construct the upgrade exactly
5053
// 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) {
5962
@Override
6063
public void toNetwork(FriendlyByteBuf buffer, TurtleTool upgrade) {
6164
buffer.writeUtf(upgrade.getUnlocalisedAdjective());
62-
RegistryWrappers.writeId(buffer, RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem());
65+
buffer.writeId(RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem());
6366
buffer.writeItem(upgrade.item);
6467
buffer.writeFloat(upgrade.damageMulitiplier);
6568
buffer.writeBoolean(upgrade.allowEnchantments);

projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ public ServerPlayer createFakePlayer(ServerLevel world, GameProfile name) {
303303
public boolean hasToolUsage(ItemStack stack) {
304304
var item = stack.getItem();
305305
return item instanceof ShovelItem || stack.is(ItemTags.SHOVELS) ||
306-
item instanceof HoeItem || stack.is(ItemTags.HOES);
306+
item instanceof HoeItem || stack.is(ItemTags.HOES);
307307
}
308308

309309
@Override
@@ -314,8 +314,8 @@ public InteractionResult canAttackEntity(ServerPlayer player, Entity entity) {
314314
@Override
315315
public boolean interactWithEntity(ServerPlayer player, Entity entity, Vec3 hitPos) {
316316
return UseEntityCallback.EVENT.invoker().interact(player, entity.level, InteractionHand.MAIN_HAND, entity, new EntityHitResult(entity, hitPos)).consumesAction() ||
317-
entity.interactAt(player, hitPos.subtract(entity.position()), InteractionHand.MAIN_HAND).consumesAction() ||
318-
player.interactOn(entity, InteractionHand.MAIN_HAND).consumesAction();
317+
entity.interactAt(player, hitPos.subtract(entity.position()), InteractionHand.MAIN_HAND).consumesAction() ||
318+
player.interactOn(entity, InteractionHand.MAIN_HAND).consumesAction();
319319
}
320320

321321
@Override
@@ -337,9 +337,7 @@ private record RegistryWrapperImpl<T>(
337337
) implements RegistryWrappers.RegistryWrapper<T> {
338338
@Override
339339
public int getId(T object) {
340-
var id = registry.getId(object);
341-
if (id == -1) throw new IllegalArgumentException(object + " was not registered in " + name);
342-
return id;
340+
return registry.getId(object);
343341
}
344342

345343
@Override
@@ -363,10 +361,13 @@ public T tryGet(ResourceLocation location) {
363361
}
364362

365363
@Override
366-
public T get(int id) {
367-
var object = registry.byId(id);
368-
if (object == null) throw new IllegalArgumentException(id + " was not registered in " + name);
369-
return object;
364+
public @Nullable T byId(int id) {
365+
return registry.byId(id);
366+
}
367+
368+
@Override
369+
public int size() {
370+
return registry.size();
370371
}
371372

372373
@Override

projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -359,9 +359,7 @@ private record RegistryWrapperImpl<T>(
359359
) implements RegistryWrappers.RegistryWrapper<T> {
360360
@Override
361361
public int getId(T object) {
362-
var id = registry.getID(object);
363-
if (id == -1) throw new IllegalStateException(object + " was not registered in " + name);
364-
return id;
362+
return registry.getID(object);
365363
}
366364

367365
@Override
@@ -385,10 +383,13 @@ public T tryGet(ResourceLocation location) {
385383
}
386384

387385
@Override
388-
public T get(int id) {
389-
var object = registry.getValue(id);
390-
if (object == null) throw new IllegalStateException(id + " was not registered in " + name);
391-
return object;
386+
public @Nullable T byId(int id) {
387+
return registry.getValue(id);
388+
}
389+
390+
@Override
391+
public int size() {
392+
return registry.getKeys().size();
392393
}
393394

394395
@Override

0 commit comments

Comments
 (0)