Improved data storage
This commit is contained in:
parent
8a811ffb3c
commit
ba91b9db69
|
@ -1,5 +1,8 @@
|
|||
package anvil.infinity;
|
||||
|
||||
import anvil.infinity.capabilities.Factory;
|
||||
import anvil.infinity.capabilities.ICapabilityPlayerData;
|
||||
import anvil.infinity.capabilities.Storage;
|
||||
import anvil.infinity.compat.CompatHandler;
|
||||
import anvil.infinity.config.ConfigHandler;
|
||||
import anvil.infinity.networking.LookAbilityPackageHandler;
|
||||
|
@ -8,6 +11,7 @@ import anvil.infinity.networking.PackageKillAbility;
|
|||
import anvil.infinity.networking.PackageReq;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraftforge.common.capabilities.CapabilityManager;
|
||||
import net.minecraftforge.event.RegistryEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||
|
@ -52,7 +56,7 @@ public class Infinity {
|
|||
int netID = 0;
|
||||
NETWORK_WRAPPER.registerMessage(LookAbilityReturnPackageHandler.class, PackageKillAbility.class, netID++, Side.SERVER);
|
||||
NETWORK_WRAPPER.registerMessage(LookAbilityPackageHandler.class, PackageReq.class, netID++, Side.CLIENT);
|
||||
|
||||
CapabilityManager.INSTANCE.register(ICapabilityPlayerData.class, new Storage(), new Factory());
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package anvil.infinity.abilities;
|
||||
|
||||
import anvil.infinity.data.EntityData;
|
||||
import anvil.infinity.data.GauntletUserInformation;
|
||||
import anvil.infinity.capabilities.GauntletUserInformation;
|
||||
import anvil.infinity.capabilities.ICapabilityPlayerData;
|
||||
import anvil.infinity.items.Items;
|
||||
import lucraft.mods.lucraftcore.superpowers.abilities.AbilityAction;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -22,10 +22,10 @@ public class AbilityChangeSnap extends AbilityAction {
|
|||
|
||||
@Override
|
||||
public boolean action() {
|
||||
EntityData data = GauntletUserInformation.getDataByEntity(entity);
|
||||
data.selectedSnapResult = data.selectedSnapResult.next();
|
||||
ICapabilityPlayerData data = GauntletUserInformation.getDataByEntity(entity);
|
||||
data.setSnapResult(data.getSnapResult().next());
|
||||
if (entity instanceof EntityPlayer) {
|
||||
((EntityPlayer) entity).sendStatusMessage(new TextComponentString("Selected ability is: " + data.selectedSnapResult),true);
|
||||
((EntityPlayer) entity).sendStatusMessage(new TextComponentString("Selected ability is: " + data.getSnapResult()),true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,35 +1,16 @@
|
|||
package anvil.infinity.abilities;
|
||||
|
||||
import anvil.infinity.compat.CompatHandler;
|
||||
import anvil.infinity.data.GauntletUserInformation;
|
||||
import anvil.infinity.helpers.GauntelHelper;
|
||||
import anvil.infinity.registry.Effects;
|
||||
import anvil.infinity.snap.SnapHelper;
|
||||
import anvil.infinity.snap.SnapResult;
|
||||
import lucraft.mods.lucraftcore.infinity.ModuleInfinity;
|
||||
import lucraft.mods.lucraftcore.superpowers.abilities.AbilityAction;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.passive.EntityRabbit;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.management.PlayerList;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class AbilitySnap extends AbilityAction {
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package anvil.infinity.capabilities;
|
||||
|
||||
import anvil.infinity.Infinity;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = Infinity.MOD_ID)
|
||||
public class CapabilityEventListener {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onAttachCapabilities(AttachCapabilitiesEvent<Entity> e) {
|
||||
Entity entity = e.getObject();
|
||||
if (entity instanceof EntityPlayer) {
|
||||
e.addCapability(new ResourceLocation(Infinity.MOD_ID, "playerCapability"), new CapabilityPlayerDataProvider(new CapabilityPlayerData()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
package anvil.infinity.capabilities;
|
||||
|
||||
import anvil.infinity.snap.SnapResult;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.capabilities.CapabilityInject;
|
||||
|
||||
public class CapabilityPlayerData implements ICapabilityPlayerData {
|
||||
|
||||
@CapabilityInject(ICapabilityPlayerData.class)
|
||||
public static final Capability<ICapabilityPlayerData> capability = null;
|
||||
|
||||
public int xPos;
|
||||
public int yPos;
|
||||
public int zPos;
|
||||
public int dim;
|
||||
|
||||
public SnapResult selectedSnapResult;
|
||||
|
||||
public CapabilityPlayerData() {
|
||||
selectedSnapResult = SnapResult.KILLHALF;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getXPos() {
|
||||
return xPos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getYPos() {
|
||||
return yPos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getZPos() {
|
||||
return zPos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDim() {
|
||||
return dim;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setXPos(int xPos) {
|
||||
this.xPos = xPos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setYPos(int yPos) {
|
||||
this.yPos = yPos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setZPos(int zPos) {
|
||||
this.zPos = zPos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDim(int dim) {
|
||||
this.dim = dim;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SnapResult getSnapResult() {
|
||||
return selectedSnapResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSnapResult(SnapResult snapResult) {
|
||||
selectedSnapResult = snapResult;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readNBT(NBTTagCompound tag) {
|
||||
setXPos(tag.getInteger("xPos"));
|
||||
setYPos(tag.getInteger("YPos"));
|
||||
setZPos(tag.getInteger("zPos"));
|
||||
setDim(tag.getInteger("dim"));
|
||||
setSnapResult(SnapResult.fromString(tag.getString("snapResult")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeNBT() {
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
nbt.setInteger("xPos", getXPos());
|
||||
nbt.setInteger("yPos", getYPos());
|
||||
nbt.setInteger("zPos", getZPos());
|
||||
nbt.setInteger("dim", getDim());
|
||||
nbt.setString("snapResult", getSnapResult().toString());
|
||||
return nbt;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package anvil.infinity.capabilities;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class CapabilityPlayerDataProvider implements ICapabilitySerializable<NBTTagCompound> {
|
||||
|
||||
ICapabilityPlayerData instance;
|
||||
|
||||
public CapabilityPlayerDataProvider(ICapabilityPlayerData instance) {
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
||||
return capability == CapabilityPlayerData.capability;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
|
||||
return capability == CapabilityPlayerData.capability ? CapabilityPlayerData.capability.<T>cast(instance) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound serializeNBT() {
|
||||
return (NBTTagCompound) CapabilityPlayerData.capability.getStorage().writeNBT(CapabilityPlayerData.capability, instance, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserializeNBT(NBTTagCompound nbt) {
|
||||
CapabilityPlayerData.capability.getStorage().readNBT(CapabilityPlayerData.capability, instance, null, nbt);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package anvil.infinity.capabilities;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
public class Factory implements Callable<ICapabilityPlayerData> {
|
||||
|
||||
@Override
|
||||
public ICapabilityPlayerData call() throws Exception {
|
||||
return new CapabilityPlayerData();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package anvil.infinity.capabilities;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GauntletUserInformation {
|
||||
|
||||
public static ICapabilityPlayerData getDataByEntity(EntityLivingBase entity) {
|
||||
if (entity instanceof EntityPlayer && entity.hasCapability(CapabilityPlayerData.capability, null)) {
|
||||
return entity.getCapability(CapabilityPlayerData.capability, null);
|
||||
}
|
||||
return new CapabilityPlayerData();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package anvil.infinity.capabilities;
|
||||
|
||||
import anvil.infinity.snap.SnapResult;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public interface ICapabilityPlayerData {
|
||||
|
||||
int getXPos();
|
||||
int getYPos();
|
||||
int getZPos();
|
||||
int getDim();
|
||||
|
||||
void setXPos(int xPos);
|
||||
void setYPos(int yPos);
|
||||
void setZPos(int zPos);
|
||||
void setDim(int dim);
|
||||
|
||||
SnapResult getSnapResult();
|
||||
void setSnapResult(SnapResult snapResult);
|
||||
|
||||
void readNBT(NBTTagCompound nbt);
|
||||
NBTTagCompound writeNBT();
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package anvil.infinity.capabilities;
|
||||
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
public class Storage implements Capability.IStorage<ICapabilityPlayerData> {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public NBTBase writeNBT(Capability<ICapabilityPlayerData> capability, ICapabilityPlayerData instance, EnumFacing side) {
|
||||
return instance.writeNBT();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readNBT(Capability<ICapabilityPlayerData> capability, ICapabilityPlayerData instance, EnumFacing side, NBTBase nbt) {
|
||||
|
||||
if (nbt instanceof NBTTagCompound) {
|
||||
instance.readNBT((NBTTagCompound) nbt);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
package anvil.infinity.data;
|
||||
|
||||
import anvil.infinity.snap.SnapResult;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
||||
public class EntityData {
|
||||
|
||||
public EntityLivingBase entity;
|
||||
public int xPos;
|
||||
public int yPos;
|
||||
public int zPos;
|
||||
public int dim;
|
||||
|
||||
public SnapResult selectedSnapResult;
|
||||
|
||||
public EntityData(EntityLivingBase entity) {
|
||||
this.entity = entity;
|
||||
selectedSnapResult = SnapResult.KILLHALF;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package anvil.infinity.data;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GauntletUserInformation {
|
||||
|
||||
public static List<EntityData> gauntletUsers = new ArrayList<>();
|
||||
|
||||
public static EntityData getDataByEntity(EntityLivingBase entity) {
|
||||
for (int i = 0; i < gauntletUsers.size(); i++) {
|
||||
if (gauntletUsers.get(i).entity.equals(entity)) {
|
||||
return gauntletUsers.get(i);
|
||||
}
|
||||
}
|
||||
EntityData data = new EntityData(entity);
|
||||
gauntletUsers.add(data);
|
||||
return data;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,11 +1,10 @@
|
|||
package anvil.infinity.snap;
|
||||
|
||||
import anvil.infinity.capabilities.ICapabilityPlayerData;
|
||||
import anvil.infinity.config.ConfigHandler;
|
||||
import anvil.infinity.data.EntityData;
|
||||
import anvil.infinity.data.GauntletUserInformation;
|
||||
import anvil.infinity.capabilities.GauntletUserInformation;
|
||||
import anvil.infinity.helpers.GauntelHelper;
|
||||
import anvil.infinity.registry.Effects;
|
||||
import lucraft.mods.lucraftcore.infinity.ModuleInfinity;
|
||||
import lucraft.mods.lucraftcore.superpowers.abilities.supplier.IAbilityProvider;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
@ -22,7 +21,6 @@ import net.minecraft.util.text.TextComponentString;
|
|||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraft.world.GameType;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
|
||||
|
@ -35,10 +33,10 @@ public class SnapHelper {
|
|||
static MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
|
||||
|
||||
public static boolean snap(EntityLivingBase entity) {
|
||||
EntityData data = GauntletUserInformation.getDataByEntity(entity);
|
||||
ICapabilityPlayerData data = GauntletUserInformation.getDataByEntity(entity);
|
||||
if (GauntelHelper.hasFullGauntlet(entity)) {
|
||||
WorldServer[] worlds = server.worlds;
|
||||
if (data.selectedSnapResult == SnapResult.KILLHALF) {
|
||||
if (data.getSnapResult() == SnapResult.KILLHALF) {
|
||||
List<Entity> entities = new ArrayList<Entity>();
|
||||
for (int i = 0; i < worlds.length; i++) {
|
||||
entities.addAll(worlds[i].loadedEntityList);
|
||||
|
@ -63,7 +61,7 @@ public class SnapHelper {
|
|||
kill = !kill;
|
||||
}
|
||||
return true;
|
||||
} else if (data.selectedSnapResult == SnapResult.DESTROYSTONES) {
|
||||
} else if (data.getSnapResult() == SnapResult.DESTROYSTONES) {
|
||||
entity.setHealth(1);
|
||||
Item mainHand = entity.getHeldItemMainhand().getItem();
|
||||
Item offHand = entity.getHeldItemOffhand().getItem();
|
||||
|
@ -76,7 +74,7 @@ public class SnapHelper {
|
|||
entity.attackEntityFrom(DamageSource.MAGIC, (entity.getHealth() / 10) - 0.01f);
|
||||
|
||||
|
||||
} else if (data.selectedSnapResult == SnapResult.CREATIVE) {
|
||||
} else if (data.getSnapResult() == SnapResult.CREATIVE) {
|
||||
if (ConfigHandler.snapCreative) {
|
||||
if (entity instanceof EntityPlayer) {
|
||||
|
||||
|
@ -88,9 +86,23 @@ public class SnapHelper {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
} else if (data.selectedSnapResult == SnapResult.BRINGBACK) {
|
||||
} else if (data.getSnapResult() == SnapResult.BRINGBACK) {
|
||||
|
||||
} else if (data.selectedSnapResult == SnapResult.RECREATE) {
|
||||
} else if (data.getSnapResult() == SnapResult.RECREATE) {
|
||||
|
||||
} else if (data.getSnapResult() == SnapResult.KILLEVIL) {
|
||||
List<Entity> entities = new ArrayList<Entity>();
|
||||
for (int i = 0; i < worlds.length; i++) {
|
||||
entities.addAll(worlds[i].loadedEntityList);
|
||||
}
|
||||
|
||||
Random random = new Random();
|
||||
for (int i = 0; i < entities.size(); i++) {
|
||||
if (entities.get(i) != entity && entities.get(i) instanceof EntityLivingBase) {
|
||||
EntityLivingBase e = ((EntityLivingBase) entities.get(i));
|
||||
e.addPotionEffect(new PotionEffect(Effects.snapEffect, random.nextInt((1200 - 10) + 1) - 10));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue