Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.svenknobloch.outskilled.common.handler;
- import java.util.Map;
- import java.util.concurrent.Callable;
- import com.google.common.base.Joiner;
- import com.svenknobloch.outskilled.Outskilled;
- import com.svenknobloch.outskilled.common.data.Skill;
- import com.svenknobloch.outskilled.common.data.Skills;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.nbt.NBTBase;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.nbt.NBTTagList;
- import net.minecraft.util.EnumFacing;
- import net.minecraft.util.ResourceLocation;
- import net.minecraftforge.common.MinecraftForge;
- import net.minecraftforge.common.capabilities.Capability;
- import net.minecraftforge.common.capabilities.CapabilityInject;
- import net.minecraftforge.common.capabilities.CapabilityManager;
- import net.minecraftforge.common.capabilities.ICapabilitySerializable;
- import net.minecraftforge.common.util.Constants;
- import net.minecraftforge.event.AttachCapabilitiesEvent;
- import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
- public class SkillManager {
- private static final ResourceLocation location = new ResourceLocation(Outskilled.MODID, "Skills");
- @CapabilityInject(Skills.class)
- public static Capability<Skills> INSTANCE;
- public static void register(){
- CapabilityManager.INSTANCE.register(Skills.class, new Capability.IStorage<Skills>()
- {
- @Override
- public NBTBase writeNBT(Capability<Skills> capability, Skills instance, EnumFacing side) {
- return null;
- }
- @Override
- public void readNBT(Capability<Skills> capability, Skills instance, EnumFacing side, NBTBase nbt) {
- }
- }, new Callable<Skills>(){
- @Override
- public Skills call() throws Exception {
- return null;
- }
- });
- MinecraftForge.EVENT_BUS.register(new SkillManager());
- }
- @SubscribeEvent
- public void attachCapabilities(AttachCapabilitiesEvent.Entity e){
- if (!(e.getEntity() instanceof EntityPlayer)){
- return;
- }
- final EntityPlayer player = (EntityPlayer)e.getEntity();
- e.addCapability(location, new ICapabilitySerializable<NBTTagCompound>(){
- final Skills playerSkills = new Skills();
- @Override
- public NBTTagCompound serializeNBT(){
- NBTTagCompound tag = new NBTTagCompound();
- NBTTagList skillList = new NBTTagList();
- for(Map.Entry<String, Skill> entry: playerSkills.skills.entrySet() ){
- Skill skill = playerSkills.skills.get(entry.getKey());
- NBTTagCompound skillTag = new NBTTagCompound();
- skillTag.setString("SkillName", skill.getName());
- skillTag.setInteger("SkillExperience", skill.getExperience());
- skillList.appendTag(skillTag);
- }
- tag.setTag("Skills", skillList);
- return tag;
- }
- @Override
- public void deserializeNBT(NBTTagCompound nbt){
- NBTTagList skillList = nbt.getTagList("Skill", Constants.NBT.TAG_COMPOUND);
- if(skillList.hasNoTags()){
- playerSkills.init();
- return;
- }
- playerSkills.skills.clear();
- for(int i = 0; i < skillList.tagCount(); i++){
- NBTTagCompound tag = skillList.getCompoundTagAt(i);
- Skill skill = new Skill(tag.getString("SkillName"));
- skill.setExperience(tag.getInteger("SkillExperience"));
- playerSkills.skills.put(skill.getName(), skill);
- }
- }
- @Override
- public boolean hasCapability(Capability<?> capability, EnumFacing facing){
- return capability == INSTANCE;
- }
- @Override
- public <T> T getCapability(Capability<T> capability, EnumFacing facing){
- System.out.println("GET CAPABILITY");
- if(capability == INSTANCE)
- return INSTANCE.cast(playerSkills);
- return null;
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement