2017-11-28 05:02:38 +01:00
|
|
|
package com.legacy.aether;
|
2016-12-17 16:28:16 +01:00
|
|
|
|
|
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
|
|
import net.minecraft.entity.boss.EntityWither;
|
|
|
|
import net.minecraft.entity.item.EntityItem;
|
2017-07-07 03:47:29 +02:00
|
|
|
import net.minecraft.entity.passive.EntityCow;
|
2016-12-17 16:28:16 +01:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
import net.minecraft.init.Blocks;
|
|
|
|
import net.minecraft.init.Items;
|
|
|
|
import net.minecraft.item.Item;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.stats.AchievementList;
|
|
|
|
import net.minecraft.util.EntityDamageSource;
|
|
|
|
import net.minecraft.util.EnumParticleTypes;
|
|
|
|
import net.minecraft.util.math.BlockPos;
|
|
|
|
import net.minecraft.util.math.RayTraceResult;
|
|
|
|
import net.minecraft.util.math.RayTraceResult.Type;
|
2017-03-02 06:25:36 +01:00
|
|
|
import net.minecraft.world.World;
|
2016-12-17 16:28:16 +01:00
|
|
|
import net.minecraftforge.event.entity.living.LivingDropsEvent;
|
|
|
|
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
|
|
|
|
import net.minecraftforge.event.entity.player.FillBucketEvent;
|
2017-07-07 03:47:29 +02:00
|
|
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteractSpecific;
|
2016-12-17 16:28:16 +01:00
|
|
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock;
|
|
|
|
import net.minecraftforge.fml.common.eventhandler.Event.Result;
|
|
|
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
|
|
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
|
|
|
|
|
2017-11-28 05:02:38 +01:00
|
|
|
import com.legacy.aether.blocks.BlocksAether;
|
|
|
|
import com.legacy.aether.blocks.portal.BlockAetherPortal;
|
|
|
|
import com.legacy.aether.entities.passive.mountable.EntityFlyingCow;
|
|
|
|
import com.legacy.aether.items.ItemsAether;
|
|
|
|
import com.legacy.aether.items.util.EnumSkyrootBucketType;
|
|
|
|
import com.legacy.aether.items.weapons.ItemSkyrootSword;
|
|
|
|
import com.legacy.aether.registry.achievements.AchievementsAether;
|
2016-12-17 16:28:16 +01:00
|
|
|
|
|
|
|
public class AetherEventHandler
|
|
|
|
{
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
public void checkBlockBannedEvent(RightClickBlock event)
|
|
|
|
{
|
|
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
|
|
ItemStack currentStack = event.getItemStack();
|
|
|
|
|
|
|
|
if (player.dimension == AetherConfig.getAetherDimensionID())
|
|
|
|
{
|
|
|
|
if (currentStack != null && (currentStack.getItem() == Items.FLINT_AND_STEEL || currentStack.getItem() == Item.getItemFromBlock(Blocks.TORCH) || currentStack.getItem() == Items.FIRE_CHARGE))
|
|
|
|
{
|
|
|
|
for (int i = 0; i < 10; ++i)
|
|
|
|
{
|
|
|
|
event.getWorld().spawnParticle(EnumParticleTypes.SMOKE_LARGE, event.getHitVec().xCoord, event.getHitVec().yCoord, event.getHitVec().zCoord, 0.0D, 0.0D, 0.0D, new int [] {});
|
|
|
|
}
|
|
|
|
|
|
|
|
event.setCanceled(true);
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (event.getWorld().getBlockState(event.getPos()).getBlock() == Blocks.BED)
|
|
|
|
{
|
|
|
|
event.setCanceled(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-07-07 03:47:29 +02:00
|
|
|
@SubscribeEvent
|
|
|
|
public void onMilkedCow(EntityInteractSpecific event)
|
|
|
|
{
|
|
|
|
if (event.getTarget() instanceof EntityCow || event.getTarget() instanceof EntityFlyingCow)
|
|
|
|
{
|
|
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
|
|
ItemStack heldItem = player.getHeldItem(event.getHand());
|
|
|
|
|
|
|
|
if (heldItem != null && heldItem.getItem() == ItemsAether.skyroot_bucket && EnumSkyrootBucketType.getType(heldItem.getMetadata()) == EnumSkyrootBucketType.Empty)
|
|
|
|
{
|
|
|
|
if (--heldItem.stackSize == 0)
|
|
|
|
{
|
|
|
|
player.setHeldItem(event.getHand(), new ItemStack(ItemsAether.skyroot_bucket, 1, EnumSkyrootBucketType.Milk.meta));
|
|
|
|
}
|
|
|
|
else if (!player.inventory.addItemStackToInventory(new ItemStack(ItemsAether.skyroot_bucket, 1, EnumSkyrootBucketType.Milk.meta)))
|
|
|
|
{
|
|
|
|
player.dropItem(new ItemStack(ItemsAether.skyroot_bucket, 1, EnumSkyrootBucketType.Milk.meta), false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-12-17 16:28:16 +01:00
|
|
|
@SubscribeEvent
|
|
|
|
public void onFillBucket(FillBucketEvent event)
|
|
|
|
{
|
2017-03-02 06:25:36 +01:00
|
|
|
ItemStack stack = event.getEmptyBucket();
|
2016-12-17 16:28:16 +01:00
|
|
|
|
2017-03-02 06:25:36 +01:00
|
|
|
if (stack == null)
|
2016-12-17 16:28:16 +01:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-03-02 06:25:36 +01:00
|
|
|
World worldObj = event.getWorld();
|
2016-12-17 16:28:16 +01:00
|
|
|
RayTraceResult target = event.getTarget();
|
|
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
|
|
|
2017-03-05 00:21:36 +01:00
|
|
|
boolean isWater = (!AetherConfig.activateOnlyWithSkyroot() && stack.getItem() == Items.WATER_BUCKET) || stack.getItem() == ItemsAether.skyroot_bucket && stack.getMetadata() == 1;
|
2017-03-02 06:25:36 +01:00
|
|
|
boolean isLava = stack.getItem() == Items.LAVA_BUCKET;
|
|
|
|
|
2016-12-17 16:28:16 +01:00
|
|
|
boolean validDimension = (player.dimension == 0 || player.dimension == AetherConfig.getAetherDimensionID());
|
|
|
|
|
|
|
|
if (target != null && target.typeOfHit == Type.BLOCK && validDimension)
|
|
|
|
{
|
2017-03-02 06:25:36 +01:00
|
|
|
BlockPos hitPos = target.getBlockPos().offset(target.sideHit);
|
2016-12-17 16:28:16 +01:00
|
|
|
|
|
|
|
if (isWater)
|
|
|
|
{
|
2017-03-02 06:25:36 +01:00
|
|
|
if (((BlockAetherPortal) BlocksAether.aether_portal).trySpawnPortal(worldObj, hitPos))
|
2016-12-17 16:28:16 +01:00
|
|
|
{
|
2017-03-02 06:25:36 +01:00
|
|
|
if (!player.capabilities.isCreativeMode)
|
2016-12-17 16:28:16 +01:00
|
|
|
{
|
2017-03-02 06:25:36 +01:00
|
|
|
if (stack.getItem() == ItemsAether.skyroot_bucket || stack.getItemDamage() == 1)
|
2016-12-17 16:28:16 +01:00
|
|
|
{
|
|
|
|
event.setFilledBucket(new ItemStack(ItemsAether.skyroot_bucket));
|
|
|
|
}
|
|
|
|
|
2017-03-02 06:25:36 +01:00
|
|
|
if (stack.getItem() == Items.WATER_BUCKET)
|
2016-12-17 16:28:16 +01:00
|
|
|
{
|
|
|
|
event.setFilledBucket(new ItemStack(Items.BUCKET));
|
|
|
|
}
|
|
|
|
}
|
2017-03-02 06:25:36 +01:00
|
|
|
|
2016-12-17 16:28:16 +01:00
|
|
|
event.setResult(Result.ALLOW);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isLava && player.dimension == AetherConfig.getAetherDimensionID())
|
|
|
|
{
|
2017-03-02 06:25:36 +01:00
|
|
|
if (player.capabilities.isCreativeMode && player.isSneaking())
|
2016-12-17 16:28:16 +01:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-03-02 06:25:36 +01:00
|
|
|
if (worldObj.isAirBlock(hitPos))
|
2016-12-17 16:28:16 +01:00
|
|
|
{
|
2017-03-02 06:25:36 +01:00
|
|
|
worldObj.setBlockState(hitPos, BlocksAether.aerogel.getDefaultState());
|
2016-12-17 16:28:16 +01:00
|
|
|
|
2017-03-02 06:25:36 +01:00
|
|
|
if (!player.capabilities.isCreativeMode)
|
|
|
|
{
|
|
|
|
event.setFilledBucket(new ItemStack(Items.BUCKET));
|
2016-12-17 16:28:16 +01:00
|
|
|
}
|
2017-03-02 06:25:36 +01:00
|
|
|
}
|
|
|
|
|
2016-12-17 16:28:16 +01:00
|
|
|
event.setResult(Result.ALLOW);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
public void onItemPickedUp(EntityItemPickupEvent event)
|
|
|
|
{
|
|
|
|
if (event.getItem().getEntityItem() != null && event.getItem().getEntityItem().getItem() == Item.getItemFromBlock(BlocksAether.aether_log))
|
|
|
|
{
|
|
|
|
event.getEntityPlayer().addStat(AchievementList.MINE_WOOD);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
public void onCrafting(ItemCraftedEvent event)
|
|
|
|
{
|
|
|
|
EntityPlayer player = event.player;
|
|
|
|
ItemStack stack = event.crafting;
|
|
|
|
|
|
|
|
if (stack.getItem() == ItemsAether.holystone_pickaxe)
|
|
|
|
{
|
|
|
|
player.addStat(AchievementList.BUILD_BETTER_PICKAXE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (stack.getItem() == ItemsAether.skyroot_pickaxe)
|
|
|
|
{
|
|
|
|
player.addStat(AchievementList.BUILD_PICKAXE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (stack.getItem() == ItemsAether.skyroot_sword)
|
|
|
|
{
|
|
|
|
player.addStat(AchievementList.BUILD_SWORD);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (stack.getItem() == Item.getItemFromBlock(BlocksAether.enchanter))
|
|
|
|
{
|
|
|
|
player.addStat(AchievementsAether.enchanter);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isGravititeTool(stack.getItem()))
|
|
|
|
{
|
|
|
|
player.addStat(AchievementsAether.grav_tools);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
public void onEntityDropLoot(LivingDropsEvent event)
|
|
|
|
{
|
|
|
|
if (event.getSource() instanceof EntityDamageSource)
|
|
|
|
{
|
|
|
|
EntityLivingBase entity = event.getEntityLiving();
|
|
|
|
EntityDamageSource source = (EntityDamageSource) event.getSource();
|
|
|
|
|
|
|
|
if (source.getEntity() instanceof EntityPlayer)
|
|
|
|
{
|
|
|
|
EntityPlayer player = (EntityPlayer) source.getEntity();
|
|
|
|
ItemStack currentItem = player.inventory.getCurrentItem();
|
|
|
|
|
|
|
|
if (currentItem != null && currentItem.getItem() instanceof ItemSkyrootSword && !(entity instanceof EntityPlayer) && !(entity instanceof EntityWither))
|
|
|
|
{
|
|
|
|
for (EntityItem items : event.getDrops())
|
|
|
|
{
|
|
|
|
EntityItem item = new EntityItem(entity.worldObj, entity.posX, entity.posY, entity.posZ, items.getEntityItem());
|
|
|
|
entity.worldObj.spawnEntityInWorld(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isGravititeTool(Item stackID)
|
|
|
|
{
|
|
|
|
return stackID == ItemsAether.gravitite_shovel || stackID == ItemsAether.gravitite_axe || stackID == ItemsAether.gravitite_pickaxe;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|