Advertisement
Guest User

Untitled

a guest
May 18th, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. package com.svenknobloch.outskilled.common.handler;
  2.  
  3. import java.util.Map;
  4. import java.util.concurrent.Callable;
  5.  
  6. import com.google.common.base.Joiner;
  7. import com.svenknobloch.outskilled.Outskilled;
  8. import com.svenknobloch.outskilled.common.data.Skill;
  9. import com.svenknobloch.outskilled.common.data.Skills;
  10.  
  11. import net.minecraft.entity.player.EntityPlayer;
  12. import net.minecraft.nbt.NBTBase;
  13. import net.minecraft.nbt.NBTTagCompound;
  14. import net.minecraft.nbt.NBTTagList;
  15. import net.minecraft.util.EnumFacing;
  16. import net.minecraft.util.ResourceLocation;
  17. import net.minecraftforge.common.MinecraftForge;
  18. import net.minecraftforge.common.capabilities.Capability;
  19. import net.minecraftforge.common.capabilities.CapabilityInject;
  20. import net.minecraftforge.common.capabilities.CapabilityManager;
  21. import net.minecraftforge.common.capabilities.ICapabilitySerializable;
  22. import net.minecraftforge.common.util.Constants;
  23. import net.minecraftforge.event.AttachCapabilitiesEvent;
  24. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  25.  
  26. public class SkillManager {
  27.  
  28. private static final ResourceLocation location = new ResourceLocation(Outskilled.MODID, "Skills");
  29.  
  30. @CapabilityInject(Skills.class)
  31. public static Capability<Skills> INSTANCE;
  32.  
  33. public static void register(){
  34. CapabilityManager.INSTANCE.register(Skills.class, new Capability.IStorage<Skills>()
  35. {
  36.  
  37. @Override
  38. public NBTBase writeNBT(Capability<Skills> capability, Skills instance, EnumFacing side) {
  39. return null;
  40. }
  41.  
  42. @Override
  43. public void readNBT(Capability<Skills> capability, Skills instance, EnumFacing side, NBTBase nbt) {
  44.  
  45. }
  46. }, new Callable<Skills>(){
  47.  
  48. @Override
  49. public Skills call() throws Exception {
  50. return null;
  51. }
  52.  
  53. });
  54.  
  55. MinecraftForge.EVENT_BUS.register(new SkillManager());
  56. }
  57.  
  58. @SubscribeEvent
  59. public void attachCapabilities(AttachCapabilitiesEvent.Entity e){
  60. if (!(e.getEntity() instanceof EntityPlayer)){
  61. return;
  62. }
  63.  
  64. final EntityPlayer player = (EntityPlayer)e.getEntity();
  65.  
  66. e.addCapability(location, new ICapabilitySerializable<NBTTagCompound>(){
  67.  
  68. final Skills playerSkills = new Skills();
  69.  
  70. @Override
  71. public NBTTagCompound serializeNBT(){
  72. NBTTagCompound tag = new NBTTagCompound();
  73. NBTTagList skillList = new NBTTagList();
  74.  
  75. for(Map.Entry<String, Skill> entry: playerSkills.skills.entrySet() ){
  76. Skill skill = playerSkills.skills.get(entry.getKey());
  77.  
  78. NBTTagCompound skillTag = new NBTTagCompound();
  79. skillTag.setString("SkillName", skill.getName());
  80. skillTag.setInteger("SkillExperience", skill.getExperience());
  81. skillList.appendTag(skillTag);
  82. }
  83. tag.setTag("Skills", skillList);
  84. return tag;
  85. }
  86.  
  87. @Override
  88. public void deserializeNBT(NBTTagCompound nbt){
  89. NBTTagList skillList = nbt.getTagList("Skill", Constants.NBT.TAG_COMPOUND);
  90.  
  91. if(skillList.hasNoTags()){
  92. playerSkills.init();
  93. return;
  94. }
  95.  
  96. playerSkills.skills.clear();
  97. for(int i = 0; i < skillList.tagCount(); i++){
  98. NBTTagCompound tag = skillList.getCompoundTagAt(i);
  99. Skill skill = new Skill(tag.getString("SkillName"));
  100. skill.setExperience(tag.getInteger("SkillExperience"));
  101. playerSkills.skills.put(skill.getName(), skill);
  102. }
  103.  
  104. }
  105.  
  106. @Override
  107. public boolean hasCapability(Capability<?> capability, EnumFacing facing){
  108. return capability == INSTANCE;
  109. }
  110.  
  111. @Override
  112. public <T> T getCapability(Capability<T> capability, EnumFacing facing){
  113. System.out.println("GET CAPABILITY");
  114. if(capability == INSTANCE)
  115. return INSTANCE.cast(playerSkills);
  116. return null;
  117. }
  118. });
  119. }
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement