package org.valkyrienskies.addon.world; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.WorldTickEvent; import org.valkyrienskies.addon.world.block.BlockValkyriumOre; import org.valkyrienskies.addon.world.capability.AntiGravityCapabilityProvider; import org.valkyrienskies.addon.world.capability.ICapabilityAntiGravity; import org.valkyrienskies.mod.common.config.VSConfig; public class WorldEventsCommon { @SubscribeEvent public void onAttachCapabilityEventItem(AttachCapabilitiesEvent event) { if (event.getObject() instanceof ItemStack) { ItemStack stack = (ItemStack) event.getObject(); Item item = stack.getItem(); if (item instanceof ItemValkyriumCrystal) { event.addCapability( new ResourceLocation(ValkyrienSkiesWorld.MOD_ID, "AntiGravityValue"), new AntiGravityCapabilityProvider(VSConfig.valkyriumCrystalForce)); } if (stack.getItem() instanceof ItemBlock) { ItemBlock blockItem = (ItemBlock) stack.getItem(); if (blockItem.getBlock() instanceof BlockValkyriumOre) { event.addCapability( new ResourceLocation(ValkyrienSkiesWorld.MOD_ID, "AntiGravityValue"), new AntiGravityCapabilityProvider(VSConfig.valkyriumOreForce)); } } } } @SubscribeEvent public void worldTick(WorldTickEvent event) { if (event.phase == Phase.START) { for (Entity entity : event.world.loadedEntityList) { if (entity instanceof EntityItem) { EntityItem itemEntity = (EntityItem) entity; ItemStack itemStack = itemEntity.getItem(); ICapabilityAntiGravity capability = itemStack.getCapability(ValkyrienSkiesWorld.ANTI_GRAVITY_CAPABILITY, null); if (capability != null) { if (capability.getMultiplier() != 0) { double multiplier = 0.12 / capability.getMultiplier(); // trust me it multiplies Y increase itemEntity.addVelocity(0, .1 - (itemEntity.motionY * multiplier), 0); } } } } } } @SubscribeEvent public void playerTick(PlayerTickEvent event) { if (event.phase == Phase.START) { EntityPlayer player = event.player; //TODO: fix the fall damage // @thebest108: what fall damage? // --DaPorkchop_, 28/03/2017 if (VSConfig.doValkyriumLifting && !player.isCreative()) { for (NonNullList<ItemStack> stackArray : player.inventory.allInventories) { for (ItemStack stack : stackArray) { if (stack != null) { if (stack.getItem() instanceof ItemBlock) { ItemBlock blockItem = (ItemBlock) stack.getItem(); if (blockItem.getBlock() instanceof BlockValkyriumOre) { player.addVelocity(0, .0025D * stack.stackSize * VSConfig.valkyriumOreForce, 0); } } else if (stack.getItem() instanceof ItemValkyriumCrystal) { player.addVelocity(0, .0025D * stack.stackSize * VSConfig.valkyriumCrystalForce, 0); } } } } } } } }