2016-07-03 20:57:00 +02:00
/ *
* This file ( " CommonEvents.java " ) is part of the Actually Additions mod for Minecraft .
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http : //ellpeck.de/actaddlicense
* View the source code at https : //github.com/Ellpeck/ActuallyAdditions
*
* © 2015 - 2016 Ellpeck
* /
package de.ellpeck.actuallyadditions.mod.event ;
2016-09-01 18:02:03 +02:00
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI ;
import de.ellpeck.actuallyadditions.api.laser.LaserType ;
2016-07-03 20:57:00 +02:00
import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements ;
import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements ;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues ;
import de.ellpeck.actuallyadditions.mod.data.PlayerData ;
import de.ellpeck.actuallyadditions.mod.data.WorldData ;
import de.ellpeck.actuallyadditions.mod.items.InitItems ;
2016-09-12 20:45:29 +02:00
import de.ellpeck.actuallyadditions.mod.misc.ConnectionPair ;
2016-08-09 20:56:09 +02:00
import de.ellpeck.actuallyadditions.mod.network.PacketHandlerHelper ;
2016-09-01 18:02:03 +02:00
import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay ;
2016-08-05 04:49:04 +02:00
import de.ellpeck.actuallyadditions.mod.util.ItemUtil ;
2016-07-03 20:57:00 +02:00
import de.ellpeck.actuallyadditions.mod.util.ModUtil ;
import de.ellpeck.actuallyadditions.mod.util.Util ;
import net.minecraft.entity.item.EntityItem ;
import net.minecraft.entity.monster.EntitySpider ;
import net.minecraft.entity.player.EntityPlayer ;
import net.minecraft.entity.player.EntityPlayerMP ;
import net.minecraft.init.Blocks ;
import net.minecraft.item.ItemStack ;
import net.minecraft.nbt.NBTTagCompound ;
import net.minecraft.nbt.NBTTagList ;
2016-09-01 18:02:03 +02:00
import net.minecraft.tileentity.TileEntity ;
2016-07-03 22:53:12 +02:00
import net.minecraftforge.common.MinecraftForge ;
2016-07-03 20:57:00 +02:00
import net.minecraftforge.event.entity.living.LivingDeathEvent ;
import net.minecraftforge.event.entity.living.LivingDropsEvent ;
import net.minecraftforge.event.world.WorldEvent ;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent ;
import net.minecraftforge.fml.common.gameevent.PlayerEvent ;
import java.util.Locale ;
public class CommonEvents {
2016-07-03 22:53:12 +02:00
public CommonEvents ( ) {
MinecraftForge . EVENT_BUS . register ( this ) ;
}
2016-07-07 17:59:45 +02:00
public static void checkAchievements ( ItemStack gotten , EntityPlayer player , InitAchievements . Type type ) {
2016-08-05 04:49:04 +02:00
if ( gotten ! = null ) {
for ( TheAchievements ach : TheAchievements . values ( ) ) {
if ( ach . type = = type ) {
if ( ItemUtil . contains ( ach . itemsToBeGotten , gotten , true ) ) {
ach . get ( player ) ;
2016-07-07 17:59:45 +02:00
}
}
}
}
}
2016-07-03 20:57:00 +02:00
@SubscribeEvent
public void livingDeathEvent ( LivingDeathEvent event ) {
if ( event . getEntityLiving ( ) . worldObj ! = null & & ! event . getEntityLiving ( ) . worldObj . isRemote & & event . getEntityLiving ( ) instanceof EntityPlayer ) {
EntityPlayer player = ( EntityPlayer ) event . getEntityLiving ( ) ;
PlayerData . PlayerSave data = PlayerData . getDataFromPlayer ( player ) ;
NBTTagList deaths = data . theCompound . getTagList ( " Deaths " , 10 ) ;
while ( deaths . tagCount ( ) > = 5 ) {
deaths . removeTag ( 0 ) ;
}
NBTTagCompound death = new NBTTagCompound ( ) ;
death . setDouble ( " X " , player . posX ) ;
death . setDouble ( " Y " , player . posY ) ;
death . setDouble ( " Z " , player . posZ ) ;
deaths . appendTag ( death ) ;
data . theCompound . setTag ( " Deaths " , deaths ) ;
//player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded"));
}
}
@SubscribeEvent
public void onEntityDropEvent ( LivingDropsEvent event ) {
if ( event . getEntityLiving ( ) . worldObj ! = null & & ! event . getEntityLiving ( ) . worldObj . isRemote & & event . getSource ( ) . getEntity ( ) instanceof EntityPlayer ) {
//Drop Cobwebs from Spiders
if ( ConfigBoolValues . DO_SPIDER_DROPS . isEnabled ( ) & & event . getEntityLiving ( ) instanceof EntitySpider ) {
if ( Util . RANDOM . nextInt ( 20 ) < = event . getLootingLevel ( ) * 2 ) {
event . getEntityLiving ( ) . entityDropItem ( new ItemStack ( Blocks . WEB , Util . RANDOM . nextInt ( 2 + event . getLootingLevel ( ) ) + 1 ) , 0 ) ;
}
}
}
}
@SubscribeEvent
2016-07-17 16:53:09 +02:00
public void onLogInEvent ( PlayerEvent . PlayerLoggedInEvent event ) {
if ( ! event . player . worldObj . isRemote & & event . player instanceof EntityPlayerMP ) {
EntityPlayerMP player = ( EntityPlayerMP ) event . player ;
2016-07-03 20:57:00 +02:00
PlayerData . PlayerSave data = PlayerData . getDataFromPlayer ( player ) ;
if ( ! data . theCompound . hasNoTags ( ) ) {
2016-08-09 20:56:09 +02:00
PacketHandlerHelper . sendPlayerDataToClientPacket ( player , data . theCompound , true ) ;
2016-09-11 20:54:04 +02:00
ModUtil . LOGGER . info ( " Sending Player Data to player " + player . getName ( ) + " with UUID " + player . getUniqueID ( ) + " . " ) ;
2016-07-12 22:13:50 +02:00
}
else {
2016-07-14 20:25:12 +02:00
ModUtil . LOGGER . info ( " Not sending Player Data to player " + player . getName ( ) + " with UUID " + player . getUniqueID ( ) + " because he doesn't have any. " ) ;
2016-07-03 20:57:00 +02:00
}
}
}
@SubscribeEvent
public void onCraftedEvent ( PlayerEvent . ItemCraftedEvent event ) {
checkAchievements ( event . crafting , event . player , InitAchievements . Type . CRAFTING ) ;
if ( ConfigBoolValues . GIVE_BOOKLET_ON_FIRST_CRAFT . isEnabled ( ) ) {
if ( ! event . player . worldObj . isRemote & & event . crafting ! = null & & event . crafting . getItem ( ) ! = null & & event . crafting . getItem ( ) ! = InitItems . itemBooklet ) {
String name = event . crafting . getItem ( ) . getRegistryName ( ) . toString ( ) ;
if ( name ! = null & & name . toLowerCase ( Locale . ROOT ) . contains ( ModUtil . MOD_ID ) ) {
PlayerData . PlayerSave compound = PlayerData . getDataFromPlayer ( event . player ) ;
if ( compound ! = null & & ! compound . theCompound . getBoolean ( " BookGottenAlready " ) ) {
compound . theCompound . setBoolean ( " BookGottenAlready " , true ) ;
EntityItem entityItem = new EntityItem ( event . player . worldObj , event . player . posX , event . player . posY , event . player . posZ , new ItemStack ( InitItems . itemBooklet ) ) ;
entityItem . setPickupDelay ( 0 ) ;
event . player . worldObj . spawnEntityInWorld ( entityItem ) ;
}
}
}
}
}
@SubscribeEvent
public void onSmeltedEvent ( PlayerEvent . ItemSmeltedEvent event ) {
checkAchievements ( event . smelting , event . player , InitAchievements . Type . SMELTING ) ;
}
@SubscribeEvent
public void onPickupEvent ( PlayerEvent . ItemPickupEvent event ) {
checkAchievements ( event . pickedUp . getEntityItem ( ) , event . player , InitAchievements . Type . PICK_UP ) ;
}
@SubscribeEvent
public void onLoad ( WorldEvent . Load event ) {
WorldData . load ( event . getWorld ( ) ) ;
2016-09-01 18:02:03 +02:00
//TODO Remove this eventually (part of the ConnectionPair system change)
if ( ! ConnectionPair . PAIRS_FOR_FIXING . isEmpty ( ) ) {
for ( ConnectionPair pair : ConnectionPair . PAIRS_FOR_FIXING ) {
2016-09-12 16:13:39 +02:00
TileEntity first = event . getWorld ( ) . getTileEntity ( pair . getPositions ( ) [ 0 ] ) ;
TileEntity second = event . getWorld ( ) . getTileEntity ( pair . getPositions ( ) [ 1 ] ) ;
2016-09-01 18:02:03 +02:00
boolean fixed = false ;
if ( first instanceof TileEntityLaserRelay & & second instanceof TileEntityLaserRelay ) {
LaserType firstType = ( ( TileEntityLaserRelay ) first ) . type ;
LaserType secondType = ( ( TileEntityLaserRelay ) second ) . type ;
if ( firstType = = secondType ) {
2016-09-12 16:13:39 +02:00
pair . setType ( firstType ) ;
2016-09-01 18:02:03 +02:00
fixed = true ;
}
}
if ( ! fixed ) {
2016-09-12 16:13:39 +02:00
for ( int i = 0 ; i < pair . getPositions ( ) . length ; i + + ) {
if ( ActuallyAdditionsAPI . connectionHandler . getNetworkFor ( pair . getPositions ( ) [ i ] , event . getWorld ( ) ) ! = null ) {
ActuallyAdditionsAPI . connectionHandler . removeRelayFromNetwork ( pair . getPositions ( ) [ i ] , event . getWorld ( ) ) ;
2016-09-01 18:08:15 +02:00
}
2016-09-01 18:02:03 +02:00
}
2016-09-12 16:13:39 +02:00
ModUtil . LOGGER . error ( " Had to remove a Laser Relay connection between " + pair . getPositions ( ) [ 0 ] + " and " + pair . getPositions ( ) [ 1 ] + " because it couldn't be adapted to the new system! " ) ;
2016-09-01 18:02:03 +02:00
}
}
ModUtil . LOGGER . info ( " Adapted " + ConnectionPair . PAIRS_FOR_FIXING . size ( ) + " Laser Relay Connections to the new system! " ) ;
ConnectionPair . PAIRS_FOR_FIXING . clear ( ) ;
}
2016-07-03 20:57:00 +02:00
}
@SubscribeEvent
public void onUnload ( WorldEvent . Unload event ) {
WorldData . unload ( event . getWorld ( ) ) ;
}
@SubscribeEvent
public void onSave ( WorldEvent . Save event ) {
WorldData . save ( event . getWorld ( ) ) ;
}
}