Advertisement
Guest User

Untitled

a guest
Jan 13th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.11 KB | None | 0 0
  1. =========================================
  2. Key
  3. =========================================
  4. public static Key<MapValue<String, EffectParams>> ITEM_EFFECTS = KeyFactory.makeMapKey(
  5. new TypeToken<Map<String, EffectParams>>() {
  6. },
  7. new TypeToken<MapValue<String, EffectParams>>() {
  8. },
  9. DataQuery.of(".", "ntrpg:itemeffects"),
  10. "ntrpg:item_effects",
  11. "Item effects");
  12. =========================================
  13. Usage
  14. =========================================
  15.  
  16. EffectsData effectsData = is.getOrCreate(EffectsData.class).get();
  17. Optional<Map<String, EffectParams>> q = effectsData.get(NKeys.ITEM_EFFECTS);
  18. Map<String, EffectParams> w = q.orElse(new HashMap<>());
  19. w.put(effectName, effectParams);
  20. effectsData.set(NKeys.ITEM_EFFECTS, w);
  21. is.offer(effectsData);
  22.  
  23. =========================================
  24. Data manipulator
  25. =========================================
  26.  
  27. public class EffectsData extends AbstractData<EffectsData, EffectsData.Immutable> {
  28.  
  29. private Map<String, EffectParams> effects;
  30. // public class EffectParams extends HashMap<String, String> {}
  31.  
  32. public EffectsData(Map<String, EffectParams> effects) {
  33. this.effects = effects;
  34. registerGettersAndSetters();
  35. }
  36.  
  37.  
  38. public EffectsData() {
  39. this(new HashMap<>());
  40. }
  41.  
  42. @Override
  43. protected void registerGettersAndSetters() {
  44. registerKeyValue(NKeys.ITEM_EFFECTS, this::effects);
  45.  
  46. registerFieldGetter(NKeys.ITEM_EFFECTS, this::getEffects);
  47.  
  48. registerFieldSetter(NKeys.ITEM_EFFECTS, this::setEffects);
  49. }
  50.  
  51. public MapValue<String, EffectParams> effects() {
  52. return Sponge.getRegistry().getValueFactory()
  53. .createMapValue(NKeys.ITEM_EFFECTS, this.effects);
  54. }
  55.  
  56.  
  57. private Map<String, EffectParams> getEffects() {
  58. return effects;
  59. }
  60.  
  61. private void setEffects(Map<String, EffectParams> effects) {
  62. this.effects = effects;
  63. }
  64.  
  65. @Override
  66. public Optional<EffectsData> fill(DataHolder dataHolder, MergeFunction overlap) {
  67. Optional<EffectsData> a = dataHolder.get(EffectsData.class);
  68. if (a.isPresent()) {
  69. EffectsData otherData = a.get();
  70. EffectsData finalData = overlap.merge(this, otherData);
  71. this.effects = finalData.effects;
  72. }
  73. return Optional.of(this);
  74. }
  75.  
  76. @Override
  77. public Optional<EffectsData> from(DataContainer container) {
  78. if (!container.contains(NKeys.ITEM_EFFECTS)) {
  79. return Optional.empty();
  80. }
  81.  
  82. effects = (Map<String, EffectParams>) container.getMap(NKeys.ITEM_EFFECTS.getQuery()).get();
  83. return Optional.of(this);
  84. }
  85.  
  86. @Override
  87. public EffectsData copy() {
  88. return new EffectsData(effects);
  89. }
  90.  
  91. @Override
  92. public EffectsData.Immutable asImmutable() {
  93. return new EffectsData.Immutable(effects);
  94. }
  95.  
  96. @Override
  97. public int getContentVersion() {
  98. return EffectsData.Builder.CONTENT_VERSION;
  99. }
  100.  
  101. @Override
  102. public DataContainer toContainer() {
  103. DataContainer dataContainer = super.toContainer();
  104. dataContainer.set(NKeys.ITEM_EFFECTS,effects);
  105. return dataContainer;
  106. }
  107.  
  108. public class Immutable extends AbstractImmutableData<Immutable, EffectsData> {
  109.  
  110. private Map<String, EffectParams> effects;
  111.  
  112.  
  113. public Immutable(Map<String, EffectParams> effects) {
  114. this.effects = effects;
  115. registerGetters();
  116. }
  117.  
  118.  
  119. public Immutable() {
  120. this(Collections.emptyMap());
  121. }
  122.  
  123. @Override
  124. protected void registerGetters() {
  125. registerKeyValue(NKeys.ITEM_EFFECTS, this::effects);
  126.  
  127. registerFieldGetter(NKeys.ITEM_EFFECTS, this::getEffects);
  128. }
  129.  
  130. public ImmutableMapValue<String, EffectParams> effects() {
  131. return Sponge.getRegistry().getValueFactory()
  132. .createMapValue(NKeys.ITEM_EFFECTS, this.effects)
  133. .asImmutable();
  134. }
  135.  
  136.  
  137. private Map<String, EffectParams> getEffects() {
  138. return effects;
  139. }
  140.  
  141. @Override
  142. public int getContentVersion() {
  143. return EffectsData.Builder.CONTENT_VERSION;
  144. }
  145.  
  146. @Override
  147. public DataContainer toContainer() {
  148. DataContainer dataContainer = super.toContainer();
  149. dataContainer.set(NKeys.ITEM_EFFECTS,effects);
  150. return dataContainer;
  151. }
  152.  
  153. @Override
  154. public EffectsData asMutable() {
  155. return new EffectsData(effects);
  156. }
  157. }
  158.  
  159. public static class Builder extends AbstractDataBuilder<EffectsData> implements DataManipulatorBuilder<EffectsData, EffectsData.Immutable> {
  160. public static final int CONTENT_VERSION = 1;
  161.  
  162. public Builder() {
  163. super(EffectsData.class, CONTENT_VERSION);
  164. }
  165.  
  166. @Override
  167. public EffectsData create() {
  168. return new EffectsData();
  169. }
  170.  
  171. @Override
  172. public Optional<EffectsData> createFrom(DataHolder dataHolder) {
  173. return create().fill(dataHolder);
  174. }
  175.  
  176. @Override
  177. protected Optional<EffectsData> buildContent(DataView container) throws InvalidDataException {
  178. if (container.contains(NKeys.ITEM_EFFECTS)) {
  179.  
  180. EffectsData effectsData = new EffectsData();
  181. Map<String, Map> map = (Map<String, Map>) container.getMap(NKeys.ITEM_EFFECTS.getQuery()).get();
  182. for (Map.Entry<String, Map> q : map.entrySet()) {
  183. EffectParams params = new EffectParams();
  184. params.putAll(q.getValue());
  185. effectsData.effects().put(q.getKey(), params);
  186. }
  187.  
  188. container.getSerializable(NKeys.ITEM_EFFECTS.getQuery(), EffectsData.class)
  189. .ifPresent(a -> {
  190. effectsData.set(NKeys.ITEM_EFFECTS, a.effects);
  191. });
  192.  
  193.  
  194. return Optional.of(effectsData);
  195. }
  196. return Optional.empty();
  197. }
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement