aether-legacy/src/main/java/com/legacy/aether/AetherEventHandler.java

236 lines
8.4 KiB
Java
Raw Normal View History

2017-11-28 05:02:38 +01:00
package com.legacy.aether;
2016-12-17 16:28:16 +01:00
2018-12-07 05:33:43 +01:00
import net.minecraft.entity.EntityAgeable;
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;
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.util.EntityDamageSource;
2018-12-07 05:33:43 +01:00
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
2016-12-17 16:28:16 +01:00
import net.minecraftforge.event.entity.living.LivingDropsEvent;
2018-12-07 05:33:43 +01:00
import net.minecraftforge.event.entity.player.EntityInteractEvent;
2016-12-17 16:28:16 +01:00
import net.minecraftforge.event.entity.player.FillBucketEvent;
2018-12-07 05:33:43 +01:00
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
2016-12-17 16:28:16 +01:00
2017-11-28 05:02:38 +01:00
import com.legacy.aether.blocks.BlocksAether;
import com.legacy.aether.blocks.portal.BlockAetherPortal;
2018-12-07 05:33:43 +01:00
import com.legacy.aether.entities.EntitiesAether;
import com.legacy.aether.entities.bosses.EntityValkyrie;
2017-11-28 05:02:38 +01:00
import com.legacy.aether.entities.passive.mountable.EntityFlyingCow;
import com.legacy.aether.items.ItemsAether;
2018-12-07 05:33:43 +01:00
import com.legacy.aether.items.dungeon.ItemDungeonKey;
2017-11-28 05:02:38 +01:00
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
2018-12-07 05:33:43 +01:00
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
2018-12-07 06:32:48 +01:00
public class
AetherEventHandler {
2016-12-17 16:28:16 +01:00
@SubscribeEvent
2018-12-07 06:32:48 +01:00
public void checkBlockBannedEvent(PlayerInteractEvent event) {
2018-12-07 05:33:43 +01:00
EntityPlayer player = event.entityPlayer;
ItemStack currentStack = player.getCurrentEquippedItem();
2016-12-17 16:28:16 +01:00
2018-12-07 06:32:48 +01:00
if (player.dimension == AetherConfig.getAetherDimensionID()) {
if (currentStack != null) {
if (currentStack.getItem() == Items.flint_and_steel || currentStack.getItem() == Item.getItemFromBlock(Blocks.torch) || currentStack.getItem() == Items.fire_charge) {
for (int i = 0; i < 10; ++i) {
2018-12-07 05:33:43 +01:00
event.world.spawnParticle("smoke", event.x, event.y, event.z, 0.0D, 0.0D, 0.0D);
}
2016-12-17 16:28:16 +01:00
2018-12-07 05:33:43 +01:00
event.setCanceled(true);
}
2018-12-07 06:32:48 +01:00
} else if (event.world.getBlock(event.x, event.y, event.z) == Blocks.bed) {
2016-12-17 16:28:16 +01:00
event.setCanceled(true);
}
}
}
@SubscribeEvent
2018-12-07 06:32:48 +01:00
public void onEntityInteract(EntityInteractEvent event) {
if (event.target instanceof EntityAgeable) {
ItemStack itemstack = event.entityPlayer.inventory.getCurrentItem();
if (itemstack != null && itemstack.getItem() == ItemsAether.aether_spawn_egg) {
if (!event.entityPlayer.worldObj.isRemote) {
Class<?> oclass = EntitiesAether.getClassFromID(itemstack.getItemDamage());
if (oclass != null && oclass.isAssignableFrom(this.getClass())) {
EntityAgeable entityageable = ((EntityAgeable) event.target).createChild((EntityAgeable) event.target);
if (entityageable != null) {
entityageable.setGrowingAge(-24000);
entityageable.setLocationAndAngles(event.target.posX, event.target.posY, event.target.posZ, 0.0F, 0.0F);
event.entityPlayer.worldObj.spawnEntityInWorld(entityageable);
if (itemstack.hasDisplayName()) {
entityageable.setCustomNameTag(itemstack.getDisplayName());
}
if (!event.entityPlayer.capabilities.isCreativeMode) {
--itemstack.stackSize;
if (itemstack.stackSize <= 0) {
event.entityPlayer.inventory.setInventorySlotContents(event.entityPlayer.inventory.currentItem, (ItemStack) null);
}
}
}
}
}
}
2018-12-07 05:33:43 +01:00
}
2018-12-07 06:32:48 +01:00
if (event.target instanceof EntityCow || event.target instanceof EntityFlyingCow) {
2018-12-07 05:33:43 +01:00
EntityPlayer player = event.entityPlayer;
ItemStack heldItem = player.getCurrentEquippedItem();
2018-12-07 06:32:48 +01:00
if (heldItem != null && heldItem.getItem() == ItemsAether.skyroot_bucket && EnumSkyrootBucketType.getType(heldItem.getItemDamage()) == EnumSkyrootBucketType.Empty) {
if (!player.capabilities.isCreativeMode) {
2018-12-07 05:33:43 +01:00
--heldItem.stackSize;
}
2018-12-07 06:32:48 +01:00
if (heldItem.stackSize <= 0) {
player.inventory.setInventorySlotContents(player.inventory.currentItem, new ItemStack(ItemsAether.skyroot_bucket, 1, EnumSkyrootBucketType.Milk.meta));
} else if (!player.inventory.addItemStackToInventory(new ItemStack(ItemsAether.skyroot_bucket, 1, EnumSkyrootBucketType.Milk.meta))) {
player.dropPlayerItemWithRandomChoice(new ItemStack(ItemsAether.skyroot_bucket, 1, EnumSkyrootBucketType.Milk.meta), false);
}
}
}
}
2016-12-17 16:28:16 +01:00
@SubscribeEvent
2018-12-07 06:32:48 +01:00
public void onFillBucket(FillBucketEvent event) {
2018-12-07 05:33:43 +01:00
World worldObj = event.world;
MovingObjectPosition target = event.target;
ItemStack stack = event.current;
EntityPlayer player = event.entityPlayer;
2016-12-17 16:28:16 +01:00
2018-12-07 05:33:43 +01:00
boolean isWater = (!AetherConfig.activateOnlyWithSkyroot() && stack.getItem() == Items.water_bucket) || (stack.getItem() == ItemsAether.skyroot_bucket && stack.getItemDamage() == 1);
boolean isLava = stack.getItem() == Items.lava_bucket;
2016-12-17 16:28:16 +01:00
2018-12-07 05:33:43 +01:00
boolean validDimension = (player.dimension == AetherConfig.getTravelDimensionID() || player.dimension == AetherConfig.getAetherDimensionID());
2018-12-07 06:32:48 +01:00
if (target != null && target.typeOfHit == MovingObjectType.BLOCK && validDimension) {
int i = target.blockX;
int j = target.blockY;
int k = target.blockZ;
if (target.sideHit == 0) {
--j;
}
if (target.sideHit == 1) {
++j;
}
if (target.sideHit == 2) {
--k;
}
if (target.sideHit == 3) {
++k;
}
if (target.sideHit == 4) {
--i;
}
if (isWater) {
if (((BlockAetherPortal) BlocksAether.aether_portal).trySpawnPortal(worldObj, i, j, k)) {
if (!player.capabilities.isCreativeMode) {
if (stack.getItem() == ItemsAether.skyroot_bucket && stack.getItemDamage() == 1) {
2018-12-07 05:33:43 +01:00
event.result = new ItemStack(ItemsAether.skyroot_bucket);
2016-12-17 16:28:16 +01:00
}
2018-12-07 06:32:48 +01:00
if (stack.getItem() == Items.water_bucket) {
2018-12-07 05:33:43 +01:00
event.result = new ItemStack(Items.bucket);
2016-12-17 16:28:16 +01:00
}
}
2018-12-07 05:33:43 +01:00
event.setResult(Event.Result.ALLOW);
2016-12-17 16:28:16 +01:00
}
}
2018-12-07 06:32:48 +01:00
if (isLava && player.dimension == AetherConfig.getAetherDimensionID()) {
if (player.capabilities.isCreativeMode && player.isSneaking()) {
2016-12-17 16:28:16 +01:00
return;
}
2018-12-07 06:32:48 +01:00
if (worldObj.isAirBlock(i, j, k)) {
2018-12-07 05:33:43 +01:00
worldObj.setBlock(i, j, k, BlocksAether.aerogel);
2016-12-17 16:28:16 +01:00
2018-12-07 06:32:48 +01:00
if (!player.capabilities.isCreativeMode) {
2018-12-07 05:33:43 +01:00
event.result = new ItemStack(Items.bucket);
2016-12-17 16:28:16 +01:00
}
}
2018-12-07 05:33:43 +01:00
event.setResult(Event.Result.ALLOW);
2016-12-17 16:28:16 +01:00
}
}
}
@SubscribeEvent
2018-12-07 06:32:48 +01:00
public void onCrafting(ItemCraftedEvent event) {
if (this.isGravititeTool(event.crafting.getItem())) {
2018-12-07 05:33:43 +01:00
event.player.triggerAchievement(AchievementsAether.grav_tools);
2018-12-07 06:32:48 +01:00
} else if (event.crafting.getItem() == Item.getItemFromBlock(BlocksAether.enchanter)) {
2018-12-07 05:33:43 +01:00
event.player.triggerAchievement(AchievementsAether.enchanter);
2016-12-17 16:28:16 +01:00
}
}
@SubscribeEvent
2018-12-07 06:32:48 +01:00
public void onEntityDropLoot(LivingDropsEvent event) {
if (event.source instanceof EntityDamageSource) {
2018-12-07 05:33:43 +01:00
EntityLivingBase entity = event.entityLiving;
EntityDamageSource source = (EntityDamageSource) event.source;
2016-12-17 16:28:16 +01:00
2018-12-07 06:32:48 +01:00
if (source.getEntity() instanceof EntityPlayer) {
2016-12-17 16:28:16 +01:00
EntityPlayer player = (EntityPlayer) source.getEntity();
ItemStack currentItem = player.inventory.getCurrentItem();
2018-12-07 06:32:48 +01:00
if (currentItem != null && currentItem.getItem() instanceof ItemSkyrootSword && !(entity instanceof EntityPlayer) && !(entity instanceof EntityWither) && !(entity instanceof EntityValkyrie)) {
for (EntityItem items : event.drops) {
2018-12-07 05:33:43 +01:00
ItemStack stack = items.getEntityItem();
2018-12-07 06:32:48 +01:00
if (!(stack.getItem() instanceof ItemDungeonKey) && stack.getItem() != ItemsAether.victory_medal && stack.getItem() != Items.skull) {
2018-12-07 05:33:43 +01:00
EntityItem item = new EntityItem(entity.worldObj, entity.posX, entity.posY, entity.posZ, items.getEntityItem());
entity.worldObj.spawnEntityInWorld(item);
}
2016-12-17 16:28:16 +01:00
}
}
}
}
}
@SubscribeEvent
public void onEntityHurt(EntityStruckByLightningEvent event)
{
if (event.entity instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer) event.entity;
if (player.inventory.getCurrentItem().getItem() == ItemsAether.lightning_sword || player.inventory.getCurrentItem().getItem() == ItemsAether.lightning_knife)
{
event.setCanceled(true);
}
}
}
2018-12-07 06:32:48 +01:00
public boolean isGravititeTool(Item stackID) {
2016-12-17 16:28:16 +01:00
return stackID == ItemsAether.gravitite_shovel || stackID == ItemsAether.gravitite_axe || stackID == ItemsAether.gravitite_pickaxe;
}
}