SimonBHB

MyInventoryData

Aug 30th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.69 KB | None | 0 0
  1. public class MyInventoryData extends AbstractData<MyInventoryData, MyImmutableInventoryData> {
  2.     private Map<Integer, ItemStack> inventory;
  3.  
  4.  
  5.     public MyInventoryData(Map<Integer, ItemStack> inventory) {
  6.         this.inventory = inventory;
  7.  
  8.         // you must call this!
  9.         registerGettersAndSetters();
  10.     }
  11.  
  12.     @Override
  13.     protected void registerGettersAndSetters() {
  14.         registerFieldGetter(ToolKeys.INVENTORY, () -> this.inventory);
  15.         registerFieldSetter(ToolKeys.INVENTORY, inventory -> this.inventory = inventory);
  16.         registerKeyValue(ToolKeys.INVENTORY, this::inventory);
  17.     }
  18.  
  19.     public MapValue<Integer, ItemStack> inventory() {
  20.         return Sponge.getRegistry().getValueFactory().createMapValue(ToolKeys.INVENTORY, inventory);
  21.     }
  22.  
  23.     @Override
  24.     public Optional<MyInventoryData> fill(DataHolder dataHolder, MergeFunction overlap) {
  25.         Optional<MyInventoryData> otherData_ = dataHolder.get(MyInventoryData.class);
  26.         if (otherData_.isPresent()) {
  27.             MyInventoryData otherData = otherData_.get();
  28.             MyInventoryData finalData = overlap.merge(this, otherData);
  29.             this.inventory = finalData.inventory;
  30.         }
  31.         return Optional.of(this);
  32.     }
  33.  
  34.     // the double method isn't strictly necessary but makes implementing the builder easier
  35.     @Override
  36.     public Optional<MyInventoryData> from(DataContainer container) {
  37.         return from((DataView) container);
  38.     }
  39.  
  40.     public Optional<MyInventoryData> from(DataView view) {
  41.         if (view.contains(ToolKeys.INVENTORY.getQuery())) {
  42.             DataView invView = view.getView(ToolKeys.INVENTORY.getQuery()).get();
  43.             Map<Integer, ItemStack> map = new HashMap<>();
  44.             for (DataQuery query : invView.getKeys(false)) {
  45.                 ItemStack stack = invView.getSerializable(query, ItemStack.class).get();
  46.                 int key = Integer.parseInt(query.toString());
  47.                 map.put(key, stack);
  48.             }
  49.             this.inventory = map;
  50.             return Optional.of(this);
  51.         } else {
  52.             return Optional.empty();
  53.         }
  54.     }
  55.  
  56.     @Override
  57.     public MyInventoryData copy() {
  58.         return new MyInventoryData(this.inventory);
  59.     }
  60.  
  61.     @Override
  62.     public MyImmutableInventoryData asImmutable() {
  63.         return new MyImmutableInventoryData(this.inventory);
  64.     }
  65.  
  66.     @Override
  67.     public int getContentVersion() {
  68.         return 1;
  69.     }
  70.  
  71.     // IMPORTANT this is what causes your data to be written to NBT
  72.     @Override
  73.     public DataContainer toContainer() {
  74.         return super.toContainer()
  75.                 .set(ToolKeys.INVENTORY.getQuery(), this.inventory);
  76.     }
  77. }
Add Comment
Please, Sign In to add comment