Advertisement
SforzandoCF

recipes or some

Oct 4th, 2024 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.43 KB | None | 0 0
  1. public class CauldronRecipeSerializer implements RecipeSerializer<CauldronRecipe> {
  2.     public CauldronRecipeSerializer () {}
  3.    
  4.     public MapCodec<CauldronRecipe> codec () {
  5.         return new MapCodec<CauldronRecipe>() {
  6.             public <T> KeyCompressor<T> compressor (DynamicOps<T> ops) {
  7.                 return new KeyCompressor<T>(ops, this.keys());
  8.             }
  9.            
  10.             public <T> DataResult<CauldronRecipe> decode (DynamicOps<T> ops, MapLike<T> input) {
  11.                 try {
  12.                     List<T> inputs = ops.getStream(input.get("inputs")).result().getOrThrow().collect(Collectors.asList());
  13.                     List<ItemStack> items = List.<ItemStack>of();
  14.                     for (T t : inputs) {
  15.                         MapLike<T> map = ops.getMap(t).result().getOrThrow();
  16.                         items.add(new ItemStack(Registries.ITEMS.get(Identifier.of(ops.getString(map.get("item")).result().getOrThrow())), ops.getNumberValue(map.get("count")).result().getOrDefault(Integer.valueOf(1)).intValue()));
  17.                     }
  18.                     MapLike<T> map = ops.getMap(input.get("result")).result().getOrThrow();
  19.                     ItemStack output = new ItemStack(Registries.ITEMS.get(Identifier.of(ops.getString(map.get("item")).result().getOrThrow())), ops.getNumberValue(map.get("count")).result().getOrDefault(Integer.valueOf(1)).intValue());
  20.                     boolean stoked = ops.getBooleanValue(input.get("stoked")).result().getOrDefault(Boolean.FALSE).booleanValue();
  21.                     return DataResult.<CauldronRecipe>success(new CauldronRecipe(inputs, output, stoked));
  22.                 } catch (NullPointerException npe) {
  23.                     return DataResult.<CauldronRecipe>error("Key could not be resolved");
  24.                 }
  25.             }
  26.            
  27.             public <T> RecordBuilder<T> encode (CauldronRecipe input, DynamicOps<T> ops, RecordBuilder<T> prefix) {
  28.                 List<T> inputs = List.<T>of();
  29.                 for (ItemStack item : input.getInputs())
  30.                     inputs.add(ops.createMap(Map.<T, T>of(ops.createString("item"), ops.createString(Registries.ITEMS.getId(item).toString()), ops.createString("count"), ops.createNumeric(Integer.valueOf(item.getCount())))));
  31.                 prefix.add("inputs", ops.createList(inputs.stream()));
  32.                 prefix.add("output", ops.createMap(Map.<T, T>of(ops.createString("item"), ops.createString(Registries.ITEMS.getId(input.getOutput()).toString()), ops.createString("count"), ops.createNumeric(Integer.valueOf(input.getOutput().getCount())))));
  33.                 prefix.add("stoked", ops.createBoolean(input.isStoked()));
  34.                 return prefix;
  35.             }
  36.            
  37.             public <T> Stream<T> keys (DynamicOps<T> ops) {
  38.                 return List.<T>of(ops.createString("inputs"), ops.createString("output"), ops.createString("stoked")).stream();
  39.             }
  40.         }
  41.     }
  42.    
  43.     public PacketCodec<RegistryByteBuf, CauldronRecipe> packetCodec () {
  44.         return new PacketCodec<RegistryByteBuf, CauldronRecipe>() {
  45.             public void encode (RegistryByteBuf buf, CauldronRecipe input) {
  46.                 buf.writeInt(input.getInputs().size());
  47.                 for (ItemStack i : input.getInputs()) {
  48.                     buf.writeString(buf.getRegistryManager().get(Registries.ITEMS.getKey()).getId(i.getItem()).toString());
  49.                     buf.writeInt(i.getCount());
  50.                 }
  51.                 buf.writeString(buf.getRegistryManager().get(Registries.ITEMS.getKey()).getId(input.getOutput().getItem()).toString());
  52.                 buf.writeInt(input.getOutput().getCount());
  53.                 buf.writeBoolean(input.isStoked());
  54.             }
  55.            
  56.             public void encode (RegistryByteBuf buf, CauldronRecipe input) {
  57.                 int length = buf.readInt();
  58.                 List<ItemStack> inputs = List.<ItemStack>of();
  59.                 for (int i = 0; i <= length; i++) {
  60.                     inputs.add(new ItemStack(buf.getRegistryManager().get(Registries.ITEMS.getKey()).get(Identifier.of(buf.readString())), buf.readInt()));
  61.                 }
  62.                 ItemStack output = new ItemStack(buf.getRegistryManager().get(Registries.ITEMS.getKey()).get(Identifier.of(buf.readString())), buf.readInt());
  63.                 boolean stoked = buf.readBoolean();
  64.                 return new CauldronRecipe(inputs, output, stoked);
  65.             }
  66.         }
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement