Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f7323289a5 | |||
| 366d1a0a5d | |||
| 0cf33c4ea3 | |||
| 21b70d0dda | |||
| 608d58277f | |||
| c790f69b90 | |||
| 72b3be0062 | |||
| 9bd33b58e1 | |||
| b069fa0fec | |||
| 689eddcba3 | |||
| 60569ac221 | |||
| 1fc2ddedec | |||
| ee4f323977 | |||
| 48f9ca1fcb | |||
| fc07acbced | |||
| 825567c122 | |||
| aa75482232 |
+1
-1
@@ -36,6 +36,6 @@ api_mekansim_version=1
|
||||
api_mfr_version=1
|
||||
api_railcraft_version=1
|
||||
api_rblocks_version=1
|
||||
api_rf_version=1
|
||||
api_rf_version=2
|
||||
api_rotarycraft_version=1
|
||||
dev_buildcraft_version=1
|
||||
|
||||
@@ -42,8 +42,8 @@ public interface IStorageCell extends ICellWorkbenchItem
|
||||
{
|
||||
|
||||
/**
|
||||
* If this returns something where N % 8 != 0 Then you will be shot on
|
||||
* sight, or your car will explode, something like that least...
|
||||
* It wont work if the return is not a multiple of 8.
|
||||
* The limit is ({@link Integer#MAX_VALUE} + 1) / 8.
|
||||
*
|
||||
* @param cellItem item
|
||||
* @return number of bytes
|
||||
|
||||
@@ -113,12 +113,12 @@ public class AEBaseBlock extends BlockContainer implements IAEFeature
|
||||
{
|
||||
super( mat );
|
||||
|
||||
if ( mat == AEGlassMaterial.instance )
|
||||
setStepSound( Block.soundTypeGlass );
|
||||
else if ( mat == Material.glass )
|
||||
if ( mat == AEGlassMaterial.instance || mat == Material.glass )
|
||||
setStepSound( Block.soundTypeGlass );
|
||||
else if ( mat == Material.rock )
|
||||
setStepSound( Block.soundTypeStone );
|
||||
else if ( mat == Material.wood )
|
||||
setStepSound( Block.soundTypeWood );
|
||||
else
|
||||
setStepSound( Block.soundTypeMetal );
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ public class BlockCrank extends AEBaseBlock
|
||||
|
||||
public BlockCrank() {
|
||||
super( BlockCrank.class, Material.wood );
|
||||
setStepSound( Block.soundTypeWood );
|
||||
setFeature( EnumSet.of( AEFeature.GrindStone ) );
|
||||
setTileEntity( TileCrank.class );
|
||||
setLightOpacity( 0 );
|
||||
|
||||
@@ -90,6 +90,10 @@ public class ContainerCraftingTerm extends ContainerMEMonitorable implements IAE
|
||||
@Override
|
||||
public IInventory getInventoryByName(String name)
|
||||
{
|
||||
if (name.equals("player"))
|
||||
{
|
||||
return invPlayer;
|
||||
}
|
||||
return ct.getInventoryByName( name );
|
||||
}
|
||||
|
||||
|
||||
@@ -447,6 +447,10 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
||||
@Override
|
||||
public IInventory getInventoryByName(String name)
|
||||
{
|
||||
if (name.equals("player"))
|
||||
{
|
||||
return invPlayer;
|
||||
}
|
||||
return ct.getInventoryByName( name );
|
||||
}
|
||||
|
||||
|
||||
@@ -118,6 +118,7 @@ import appeng.core.features.AEFeature;
|
||||
import appeng.core.features.ColoredItemDefinition;
|
||||
import appeng.core.features.DamagedItemDefinition;
|
||||
import appeng.core.features.IAEFeature;
|
||||
import appeng.core.features.IFeatureHandler;
|
||||
import appeng.core.features.IStackSrc;
|
||||
import appeng.core.features.ItemStackSrc;
|
||||
import appeng.core.features.NullItemDefinition;
|
||||
@@ -506,26 +507,33 @@ public class Registration
|
||||
|
||||
private AEItemDefinition addFeature( Class<? extends IAEFeature> featureClass, Object... args )
|
||||
{
|
||||
ClassInstantiation<IAEFeature> instantiation = new ClassInstantiation<IAEFeature>( featureClass, args );
|
||||
Optional<IAEFeature> instance = instantiation.get();
|
||||
final ClassInstantiation<IAEFeature> instantiation = new ClassInstantiation<IAEFeature>( featureClass, args );
|
||||
final Optional<IAEFeature> instance = instantiation.get();
|
||||
|
||||
if ( instance.isPresent() )
|
||||
{
|
||||
IAEFeature feature = instance.get();
|
||||
|
||||
for ( AEFeature f : feature.handler().getFeatures() )
|
||||
final IAEFeature feature = instance.get();
|
||||
final IFeatureHandler handler = feature.handler();
|
||||
if ( handler.isFeatureAvailable() )
|
||||
{
|
||||
this.featuresToEntities.put( f, featureClass );
|
||||
for ( AEFeature f : handler.getFeatures() )
|
||||
{
|
||||
this.featuresToEntities.put( f, featureClass );
|
||||
}
|
||||
|
||||
handler.register();
|
||||
feature.postInit();
|
||||
|
||||
return handler.getDefinition();
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
feature.handler().register();
|
||||
feature.postInit();
|
||||
|
||||
return feature.handler().getDefinition();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RuntimeException( "Error with Feature: " + featureClass.getName() );
|
||||
throw new RuntimeException( "Error upon Class Instantiation with Feature: " + featureClass.getName() );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -560,7 +568,7 @@ public class Registration
|
||||
ph.registerNewLayer( "appeng.parts.layers.LayerIBatteryProvider", "buildcraft.api.mj.IBatteryProvider" );
|
||||
|
||||
if ( AppEng.instance.isIntegrationEnabled( IntegrationType.RF ) )
|
||||
ph.registerNewLayer( "appeng.parts.layers.LayerIEnergyHandler", "cofh.api.energy.IEnergyHandler" );
|
||||
ph.registerNewLayer( "appeng.parts.layers.LayerIEnergyHandler", "cofh.api.energy.IEnergyReceiver" );
|
||||
|
||||
FMLCommonHandler.instance().bus().register( TickHandler.instance );
|
||||
MinecraftForge.EVENT_BUS.register( TickHandler.instance );
|
||||
@@ -588,7 +596,9 @@ public class Registration
|
||||
|
||||
recipeHandler.injectRecipes();
|
||||
|
||||
PlayerStatsRegistration.instance.init();
|
||||
final PlayerStatsRegistration registration = new PlayerStatsRegistration( FMLCommonHandler.instance().bus(), AEConfig.instance );
|
||||
registration.registerAchievementHandlers();
|
||||
registration.registerAchievements();
|
||||
|
||||
if ( AEConfig.instance.isFeatureEnabled( AEFeature.enableDisassemblyCrafting ) )
|
||||
CraftingManager.getInstance().getRecipeList().add( new DisassembleRecipe() );
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
package appeng.core.stats;
|
||||
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
/**
|
||||
* handles the achievement when an {@link net.minecraft.item.Item} is crafted by a player.
|
||||
* The achievement is only added if its a real {@link net.minecraft.entity.player.EntityPlayer}.
|
||||
*
|
||||
* @author thatsIch
|
||||
* @since rv2
|
||||
*/
|
||||
public class AchievementCraftingHandler
|
||||
{
|
||||
private final PlayerDifferentiator differentiator;
|
||||
|
||||
public AchievementCraftingHandler( PlayerDifferentiator differentiator )
|
||||
{
|
||||
this.differentiator = differentiator;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPlayerCraftingEvent( PlayerEvent.ItemCraftedEvent event )
|
||||
{
|
||||
if ( this.differentiator.isNoPlayer( event.player ) || event.crafting == null )
|
||||
return;
|
||||
|
||||
for ( Achievements achievement : Achievements.values() )
|
||||
{
|
||||
switch ( achievement.type )
|
||||
{
|
||||
case Craft:
|
||||
if ( Platform.isSameItemPrecise( achievement.stack, event.crafting ) )
|
||||
{
|
||||
achievement.addToPlayer( event.player );
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case CraftItem:
|
||||
if ( achievement.stack != null && achievement.stack.getItem().getClass() == event.crafting.getItem().getClass() )
|
||||
{
|
||||
achievement.addToPlayer( event.player );
|
||||
return;
|
||||
}
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
package appeng.core.stats;
|
||||
|
||||
|
||||
/**
|
||||
* Hierarchy of the AE2 achievements
|
||||
*
|
||||
* @author thatsIch
|
||||
* @since rv2
|
||||
*/
|
||||
public class AchievementHierarchy
|
||||
{
|
||||
/**
|
||||
* Setup hierarchy through assigning parents.
|
||||
*/
|
||||
public void registerAchievementHierarchy()
|
||||
{
|
||||
Achievements.Presses.setParent( Achievements.Compass );
|
||||
|
||||
Achievements.Fluix.setParent( Achievements.ChargedQuartz );
|
||||
|
||||
Achievements.Charger.setParent( Achievements.Fluix );
|
||||
|
||||
Achievements.CrystalGrowthAccelerator.setParent( Achievements.Charger );
|
||||
|
||||
Achievements.GlassCable.setParent( Achievements.Charger );
|
||||
|
||||
Achievements.SpatialIOExplorer.setParent( Achievements.SpatialIO );
|
||||
|
||||
Achievements.IOPort.setParent( Achievements.StorageCell );
|
||||
|
||||
Achievements.PatternTerminal.setParent( Achievements.CraftingTerminal );
|
||||
|
||||
Achievements.Controller.setParent( Achievements.Networking1 );
|
||||
|
||||
Achievements.Networking2.setParent( Achievements.Controller );
|
||||
|
||||
Achievements.Networking3.setParent( Achievements.Networking2 );
|
||||
|
||||
Achievements.P2P.setParent( Achievements.Controller );
|
||||
|
||||
Achievements.Recursive.setParent( Achievements.Controller );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
package appeng.core.stats;
|
||||
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
/**
|
||||
* handles the achievement when an {@link net.minecraft.item.Item} is picked up by a player.
|
||||
* The achievement is only added if its a real {@link net.minecraft.entity.player.EntityPlayer}.
|
||||
*
|
||||
* @author thatsIch
|
||||
* @since rv2
|
||||
*/
|
||||
public class AchievementPickupHandler
|
||||
{
|
||||
private final PlayerDifferentiator differentiator;
|
||||
|
||||
public AchievementPickupHandler( PlayerDifferentiator differentiator )
|
||||
{
|
||||
this.differentiator = differentiator;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onItemPickUp( PlayerEvent.ItemPickupEvent event )
|
||||
{
|
||||
if ( this.differentiator.isNoPlayer( event.player ) || event.pickedUp == null || event.pickedUp.getEntityItem() == null )
|
||||
return;
|
||||
|
||||
ItemStack is = event.pickedUp.getEntityItem();
|
||||
|
||||
for ( Achievements achievement : Achievements.values() )
|
||||
{
|
||||
if ( achievement.type == AchievementType.Pickup && Platform.isSameItemPrecise( achievement.stack, is ) )
|
||||
{
|
||||
achievement.addToPlayer( event.player );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
package appeng.core.stats;
|
||||
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
|
||||
|
||||
/**
|
||||
* Can differentiate if a {@link net.minecraft.entity.player.EntityPlayer} is a real player or not
|
||||
*
|
||||
* @author thatsIch
|
||||
* @since rv2
|
||||
*/
|
||||
public class PlayerDifferentiator
|
||||
{
|
||||
/**
|
||||
* Can determine if an {@link net.minecraft.entity.player.EntityPlayer} is not a real player.
|
||||
* This is based on if the {@param player} is:
|
||||
* - null
|
||||
* - dead
|
||||
* - fake
|
||||
*
|
||||
* @param player to be checked player
|
||||
* @return true if {@param player} is not a real player
|
||||
*/
|
||||
public boolean isNoPlayer( EntityPlayer player )
|
||||
{
|
||||
return player == null || player.isDead || player instanceof FakePlayer;
|
||||
}
|
||||
}
|
||||
@@ -18,125 +18,74 @@
|
||||
|
||||
package appeng.core.stats;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.stats.Achievement;
|
||||
import net.minecraftforge.common.AchievementPage;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.EventBus;
|
||||
|
||||
import appeng.core.AEConfig;
|
||||
import appeng.core.features.AEFeature;
|
||||
import appeng.util.Platform;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||
|
||||
|
||||
/**
|
||||
* Registers any items a player is picking up or is crafting.
|
||||
* Registered items are added to the player stats.
|
||||
* This will only happen if the {@link AEFeature#Achievements} feature is enabled.
|
||||
*/
|
||||
public class PlayerStatsRegistration
|
||||
{
|
||||
/**
|
||||
* {@link cpw.mods.fml.common.eventhandler.EventBus} to which the handlers might get posted to depending if the feature is enabled
|
||||
*/
|
||||
private final EventBus bus;
|
||||
|
||||
public final static PlayerStatsRegistration instance = new PlayerStatsRegistration();
|
||||
/**
|
||||
* is true if the {@link appeng.core.features.AEFeature#Achievements} is enabled in the {@param config}
|
||||
*/
|
||||
private final boolean isAchievementFeatureEnabled;
|
||||
|
||||
AchievementPage ae2AchievementPage;
|
||||
|
||||
@SubscribeEvent
|
||||
public void onCrafting(PlayerEvent.ItemCraftedEvent event)
|
||||
/**
|
||||
* Constructs a {@link appeng.core.stats.PlayerStatsRegistration} with an {@link cpw.mods.fml.common.eventhandler.EventBus} and {@link appeng.core.AEConfig}.
|
||||
*
|
||||
* @param bus {@see #bus}
|
||||
* @param config {@link appeng.core.AEConfig} which is used to determine if the {@link appeng.core.features.AEFeature#Achievements} is enabled
|
||||
*/
|
||||
public PlayerStatsRegistration( EventBus bus, AEConfig config )
|
||||
{
|
||||
if ( notPlayer( event.player ) || event.crafting == null )
|
||||
return;
|
||||
|
||||
for (Achievements a : Achievements.values())
|
||||
{
|
||||
switch (a.type)
|
||||
{
|
||||
case Craft:
|
||||
if ( Platform.isSameItemPrecise( a.stack, event.crafting ) )
|
||||
{
|
||||
a.addToPlayer( event.player );
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case CraftItem:
|
||||
if ( a.stack.getItem().getClass() == event.crafting.getItem().getClass() )
|
||||
{
|
||||
a.addToPlayer( event.player );
|
||||
return;
|
||||
}
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onCrafting(PlayerEvent.ItemPickupEvent event)
|
||||
{
|
||||
if ( notPlayer( event.player ) || event.pickedUp == null || event.pickedUp.getEntityItem() == null )
|
||||
return;
|
||||
|
||||
ItemStack is = event.pickedUp.getEntityItem();
|
||||
|
||||
for (Achievements a : Achievements.values())
|
||||
{
|
||||
switch (a.type)
|
||||
{
|
||||
case Pickup:
|
||||
if ( Platform.isSameItemPrecise( a.stack, is ) )
|
||||
{
|
||||
a.addToPlayer( event.player );
|
||||
return;
|
||||
}
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean notPlayer(EntityPlayer player)
|
||||
{
|
||||
if ( player == null || player.isDead || player instanceof FakePlayer )
|
||||
return true;
|
||||
return false;
|
||||
this.bus = bus;
|
||||
this.isAchievementFeatureEnabled = config.isFeatureEnabled( AEFeature.Achievements );
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign Parents and hierarchy.
|
||||
* Registers the {@link appeng.core.stats.AchievementCraftingHandler} and {@link appeng.core.stats.AchievementPickupHandler} to the {@link #bus} if {@link #isAchievementFeatureEnabled} is true.
|
||||
*/
|
||||
private void initHierarchy()
|
||||
public void registerAchievementHandlers()
|
||||
{
|
||||
Achievements.Presses.setParent( Achievements.Compass );
|
||||
if ( this.isAchievementFeatureEnabled )
|
||||
{
|
||||
final PlayerDifferentiator differentiator = new PlayerDifferentiator();
|
||||
final AchievementCraftingHandler craftingHandler = new AchievementCraftingHandler( differentiator );
|
||||
final AchievementPickupHandler pickupHandler = new AchievementPickupHandler( differentiator );
|
||||
|
||||
Achievements.Fluix.setParent( Achievements.ChargedQuartz );
|
||||
|
||||
Achievements.Charger.setParent( Achievements.Fluix );
|
||||
|
||||
Achievements.CrystalGrowthAccelerator.setParent( Achievements.Charger );
|
||||
|
||||
Achievements.GlassCable.setParent( Achievements.Charger );
|
||||
|
||||
Achievements.SpatialIOExplorer.setParent( Achievements.SpatialIO );
|
||||
|
||||
Achievements.IOPort.setParent( Achievements.StorageCell );
|
||||
|
||||
Achievements.PatternTerminal.setParent( Achievements.CraftingTerminal );
|
||||
|
||||
Achievements.Controller.setParent( Achievements.Networking1 );
|
||||
|
||||
Achievements.Networking2.setParent( Achievements.Controller );
|
||||
|
||||
Achievements.Networking3.setParent( Achievements.Networking2 );
|
||||
|
||||
Achievements.P2P.setParent( Achievements.Controller );
|
||||
|
||||
Achievements.Recursive.setParent( Achievements.Controller );
|
||||
this.bus.register( craftingHandler );
|
||||
this.bus.register( pickupHandler );
|
||||
}
|
||||
}
|
||||
|
||||
public void init()
|
||||
/**
|
||||
* Registers the {@link appeng.core.stats.AchievementHierarchy} and adds all {@link appeng.core.stats.Achievements} to a new {@link net.minecraftforge.common.AchievementPage}.
|
||||
*/
|
||||
public void registerAchievements()
|
||||
{
|
||||
if ( AEConfig.instance.isFeatureEnabled( AEFeature.Achievements ) )
|
||||
if ( this.isAchievementFeatureEnabled )
|
||||
{
|
||||
FMLCommonHandler.instance().bus().register( this );
|
||||
initHierarchy();
|
||||
final AchievementHierarchy hierarchy = new AchievementHierarchy();
|
||||
hierarchy.registerAchievementHierarchy();
|
||||
|
||||
for (Stats s : Stats.values())
|
||||
for ( Stats s : Stats.values() )
|
||||
s.getStat();
|
||||
|
||||
/**
|
||||
@@ -144,14 +93,14 @@ public class PlayerStatsRegistration
|
||||
*/
|
||||
ArrayList<Achievement> list = new ArrayList<Achievement>();
|
||||
|
||||
for (Achievements a : Achievements.values())
|
||||
for ( Achievements a : Achievements.values() )
|
||||
{
|
||||
Achievement ach = a.getAchievement();
|
||||
if ( ach != null )
|
||||
list.add( ach );
|
||||
}
|
||||
|
||||
ae2AchievementPage = new AchievementPage( "Applied Energistics 2", list.toArray( new Achievement[list.size()] ) );
|
||||
AchievementPage ae2AchievementPage = new AchievementPage( "Applied Energistics 2", list.toArray( new Achievement[list.size()] ) );
|
||||
AchievementPage.registerAchievementPage( ae2AchievementPage );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,25 +104,26 @@ public class PacketNEIRecipe extends AppEngPacket
|
||||
IEnergyGrid energy = grid.getCache( IEnergyGrid.class );
|
||||
ISecurityGrid security = grid.getCache( ISecurityGrid.class );
|
||||
IInventory craftMatrix = cct.getInventoryByName( "crafting" );
|
||||
IInventory playerInventory = cct.getInventoryByName( "player" );
|
||||
|
||||
Actionable realForFake = cct.useRealItems() ? Actionable.MODULATE : Actionable.SIMULATE;
|
||||
|
||||
if ( inv != null && recipe != null && security != null )
|
||||
{
|
||||
InventoryCrafting ic = new InventoryCrafting( new ContainerNull(), 3, 3 );
|
||||
InventoryCrafting testInv = new InventoryCrafting( new ContainerNull(), 3, 3 );
|
||||
for (int x = 0; x < 9; x++)
|
||||
{
|
||||
if ( recipe[x] != null && recipe[x].length > 0 )
|
||||
{
|
||||
ic.setInventorySlotContents( x, recipe[x][0] );
|
||||
testInv.setInventorySlotContents(x, recipe[x][0]);
|
||||
}
|
||||
}
|
||||
|
||||
IRecipe r = Platform.findMatchingRecipe( ic, pmp.worldObj );
|
||||
IRecipe r = Platform.findMatchingRecipe( testInv, pmp.worldObj );
|
||||
|
||||
if ( r != null && security.hasPermission( player, SecurityPermissions.EXTRACT ) )
|
||||
{
|
||||
ItemStack is = r.getCraftingResult( ic );
|
||||
ItemStack is = r.getCraftingResult( testInv );
|
||||
|
||||
if ( is != null )
|
||||
{
|
||||
@@ -132,14 +133,14 @@ public class PacketNEIRecipe extends AppEngPacket
|
||||
|
||||
for (int x = 0; x < craftMatrix.getSizeInventory(); x++)
|
||||
{
|
||||
ItemStack PatternItem = ic.getStackInSlot( x );
|
||||
ItemStack PatternItem = testInv.getStackInSlot( x );
|
||||
|
||||
ItemStack currentItem = craftMatrix.getStackInSlot( x );
|
||||
if ( currentItem != null )
|
||||
{
|
||||
ic.setInventorySlotContents( x, currentItem );
|
||||
ItemStack newItemStack = r.matches( ic, pmp.worldObj ) ? r.getCraftingResult( ic ) : null;
|
||||
ic.setInventorySlotContents( x, PatternItem );
|
||||
testInv.setInventorySlotContents(x, currentItem);
|
||||
ItemStack newItemStack = r.matches( testInv, pmp.worldObj ) ? r.getCraftingResult( testInv ) : null;
|
||||
testInv.setInventorySlotContents(x, PatternItem);
|
||||
|
||||
if ( newItemStack == null || !Platform.isSameItemPrecise( newItemStack, is ) )
|
||||
{
|
||||
@@ -158,11 +159,15 @@ public class PacketNEIRecipe extends AppEngPacket
|
||||
}
|
||||
}
|
||||
|
||||
// True if we need to fetch an item for the recipe
|
||||
if ( PatternItem != null && currentItem == null )
|
||||
{
|
||||
ItemStack whichItem = Platform.extractItemsByRecipe( energy, cct.getSource(), storage, player.worldObj, r, is, ic,
|
||||
// Grab from network by recipe
|
||||
ItemStack whichItem = Platform.extractItemsByRecipe( energy, cct.getSource(), storage, player.worldObj, r, is, testInv,
|
||||
PatternItem, x, all, realForFake, filter );
|
||||
|
||||
// If that doesn't get it, grab exact items from network (?)
|
||||
// TODO see if this code is necessary
|
||||
if ( whichItem == null )
|
||||
{
|
||||
for (int y = 0; y < recipe[x].length; y++)
|
||||
@@ -184,6 +189,26 @@ public class PacketNEIRecipe extends AppEngPacket
|
||||
}
|
||||
}
|
||||
|
||||
// If that doesn't work, grab from the player's inventory
|
||||
if ( whichItem == null && playerInventory != null ) {
|
||||
for ( int y = 0; y < playerInventory.getSizeInventory(); y++ )
|
||||
{
|
||||
// Put the item in the test inventory, and check if the recipe is satisfied
|
||||
testInv.setInventorySlotContents(x, playerInventory.getStackInSlot(y));
|
||||
if ( r.matches(testInv, pmp.worldObj) )
|
||||
{
|
||||
// Take the item out.
|
||||
if ( realForFake == Actionable.SIMULATE ) {
|
||||
whichItem = playerInventory.getStackInSlot(y).copy();
|
||||
whichItem.stackSize = 1;
|
||||
} else {
|
||||
whichItem = playerInventory.decrStackSize(y, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
craftMatrix.setInventorySlotContents( x, whichItem );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ public class RF extends BaseModule
|
||||
public static RF instance;
|
||||
|
||||
public RF() {
|
||||
TestClass( cofh.api.energy.IEnergyReceiver.class );
|
||||
TestClass( cofh.api.energy.IEnergyProvider.class );
|
||||
TestClass( cofh.api.energy.IEnergyHandler.class );
|
||||
TestClass( cofh.api.energy.IEnergyConnection.class );
|
||||
}
|
||||
|
||||
@@ -18,40 +18,36 @@
|
||||
|
||||
package appeng.integration.modules.helpers;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
|
||||
public class NullRFHandler implements IEnergyHandler
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
|
||||
|
||||
public class NullRFHandler implements IEnergyReceiver
|
||||
{
|
||||
|
||||
@Override
|
||||
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
|
||||
public int receiveEnergy( ForgeDirection from, int maxReceive, boolean simulate )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
|
||||
public int getEnergyStored( ForgeDirection from )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnergyStored(ForgeDirection from)
|
||||
public int getMaxEnergyStored( ForgeDirection from )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxEnergyStored(ForgeDirection from)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConnectEnergy(ForgeDirection from)
|
||||
public boolean canConnectEnergy( ForgeDirection from )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,7 +21,12 @@ package appeng.parts.layers;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import appeng.api.parts.IPart;
|
||||
import appeng.api.parts.LayerBase;
|
||||
|
||||
import cofh.api.energy.IEnergyConnection;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import cofh.api.energy.IEnergyProvider;
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
|
||||
|
||||
public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler
|
||||
{
|
||||
@@ -29,9 +34,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler
|
||||
@Override
|
||||
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
|
||||
{
|
||||
IPart part = getPart( from );
|
||||
if ( part instanceof IEnergyHandler )
|
||||
return ((IEnergyHandler) part).receiveEnergy( from, maxReceive, simulate );
|
||||
IPart part = this.getPart( from );
|
||||
if ( part instanceof IEnergyReceiver )
|
||||
return ((IEnergyReceiver) part).receiveEnergy( from, maxReceive, simulate );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -39,9 +44,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler
|
||||
@Override
|
||||
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
|
||||
{
|
||||
IPart part = getPart( from );
|
||||
if ( part instanceof IEnergyHandler )
|
||||
return ((IEnergyHandler) part).extractEnergy( from, maxExtract, simulate );
|
||||
IPart part = this.getPart( from );
|
||||
if ( part instanceof IEnergyProvider )
|
||||
return ((IEnergyProvider) part).extractEnergy( from, maxExtract, simulate );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -49,9 +54,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler
|
||||
@Override
|
||||
public int getEnergyStored(ForgeDirection from)
|
||||
{
|
||||
IPart part = getPart( from );
|
||||
if ( part instanceof IEnergyHandler )
|
||||
return ((IEnergyHandler) part).getEnergyStored( from );
|
||||
IPart part = this.getPart( from );
|
||||
if ( part instanceof IEnergyProvider )
|
||||
return ((IEnergyProvider) part).getEnergyStored( from );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -59,9 +64,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler
|
||||
@Override
|
||||
public int getMaxEnergyStored(ForgeDirection from)
|
||||
{
|
||||
IPart part = getPart( from );
|
||||
if ( part instanceof IEnergyHandler )
|
||||
return ((IEnergyHandler) part).getMaxEnergyStored( from );
|
||||
IPart part = this.getPart( from );
|
||||
if ( part instanceof IEnergyProvider )
|
||||
return ((IEnergyProvider) part).getMaxEnergyStored( from );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -69,9 +74,9 @@ public class LayerIEnergyHandler extends LayerBase implements IEnergyHandler
|
||||
@Override
|
||||
public boolean canConnectEnergy(ForgeDirection from)
|
||||
{
|
||||
IPart part = getPart( from );
|
||||
if ( part instanceof IEnergyHandler )
|
||||
return ((IEnergyHandler) part).canConnectEnergy( from );
|
||||
IPart part = this.getPart( from );
|
||||
if ( part instanceof IEnergyConnection )
|
||||
return ((IEnergyConnection) part).canConnectEnergy( from );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
package appeng.parts.p2p;
|
||||
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
@@ -25,6 +26,12 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.api.config.TunnelType;
|
||||
import appeng.core.AppEng;
|
||||
@@ -34,18 +41,28 @@ import appeng.me.GridAccessException;
|
||||
import appeng.transformer.annotations.integration.Interface;
|
||||
import appeng.transformer.annotations.integration.InterfaceList;
|
||||
import appeng.util.Platform;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
@InterfaceList(value = { @Interface(iface = "cofh.api.energy.IEnergyHandler", iname = "RF") })
|
||||
public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cofh.api.energy.IEnergyHandler
|
||||
|
||||
@InterfaceList( value = { @Interface( iface = "cofh.api.energy.IEnergyReceiver", iname = "RF" ) } )
|
||||
public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements IEnergyReceiver
|
||||
{
|
||||
private static final ThreadLocal<Stack<PartP2PRFPower>> THREAD_STACK = new ThreadLocal<Stack<PartP2PRFPower>>();
|
||||
/**
|
||||
* Default element based on the null element pattern
|
||||
*/
|
||||
private static final IEnergyReceiver NULL_HANDLER = new NullRFHandler();
|
||||
private boolean cachedTarget = false;
|
||||
private IEnergyReceiver outputTarget;
|
||||
|
||||
private static final IEnergyHandler myNullHandler = new NullRFHandler();
|
||||
public PartP2PRFPower( ItemStack is )
|
||||
{
|
||||
super( is );
|
||||
|
||||
boolean cachedTarget = false;
|
||||
IEnergyHandler outputTarget;
|
||||
if ( !AppEng.instance.isIntegrationEnabled( IntegrationType.RF ) )
|
||||
{
|
||||
throw new RuntimeException( "RF Not installed!" );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TunnelType getTunnelType()
|
||||
@@ -53,61 +70,38 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
return TunnelType.RF_POWER;
|
||||
}
|
||||
|
||||
public PartP2PRFPower(ItemStack is) {
|
||||
super( is );
|
||||
|
||||
if ( !AppEng.instance.isIntegrationEnabled( IntegrationType.RF ) )
|
||||
throw new RuntimeException( "RF Not installed!" );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborChanged()
|
||||
public void onTunnelNetworkChange()
|
||||
{
|
||||
super.onNeighborChanged();
|
||||
cachedTarget = false;
|
||||
this.getHost().notifyNeighbors();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
@SideOnly( Side.CLIENT )
|
||||
public IIcon getTypeTexture()
|
||||
{
|
||||
return Blocks.iron_block.getBlockTextureFromSide( 0 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTunnelNetworkChange()
|
||||
public void onNeighborChanged()
|
||||
{
|
||||
getHost().notifyNeighbors();
|
||||
}
|
||||
super.onNeighborChanged();
|
||||
|
||||
public float getPowerDrainPerTick()
|
||||
{
|
||||
return 0.5f;
|
||||
}
|
||||
|
||||
static final ThreadLocal<Stack<PartP2PRFPower>> depth = new ThreadLocal<Stack<PartP2PRFPower>>();
|
||||
|
||||
private Stack<PartP2PRFPower> getDepth()
|
||||
{
|
||||
Stack<PartP2PRFPower> s = depth.get();
|
||||
|
||||
if ( s == null )
|
||||
depth.set( s = new Stack<PartP2PRFPower>() );
|
||||
|
||||
return s;
|
||||
this.cachedTarget = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
|
||||
public int receiveEnergy( ForgeDirection from, int maxReceive, boolean simulate )
|
||||
{
|
||||
if ( output )
|
||||
if ( this.output )
|
||||
return 0;
|
||||
|
||||
if ( isActive() )
|
||||
if ( this.isActive() )
|
||||
{
|
||||
Stack<PartP2PRFPower> stack = getDepth();
|
||||
Stack<PartP2PRFPower> stack = this.getDepth();
|
||||
|
||||
for (PartP2PRFPower t : stack)
|
||||
for ( PartP2PRFPower t : stack )
|
||||
if ( t == this )
|
||||
return 0;
|
||||
|
||||
@@ -117,7 +111,7 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
|
||||
try
|
||||
{
|
||||
for (PartP2PRFPower t : getOutputs())
|
||||
for ( PartP2PRFPower t : this.getOutputs() )
|
||||
{
|
||||
if ( Platform.getRandomInt() % 2 > 0 )
|
||||
{
|
||||
@@ -132,7 +126,7 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
|
||||
if ( maxReceive > 0 )
|
||||
{
|
||||
for (PartP2PRFPower t : getOutputs())
|
||||
for ( PartP2PRFPower t : this.getOutputs() )
|
||||
{
|
||||
int receiver = t.getOutput().receiveEnergy( t.side.getOpposite(), maxReceive, simulate );
|
||||
maxReceive -= receiver;
|
||||
@@ -143,9 +137,9 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
}
|
||||
}
|
||||
|
||||
QueueTunnelDrain( PowerUnits.RF, total );
|
||||
this.QueueTunnelDrain( PowerUnits.RF, total );
|
||||
}
|
||||
catch (GridAccessException ignored)
|
||||
catch ( GridAccessException ignored )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -158,23 +152,47 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
|
||||
private Stack<PartP2PRFPower> getDepth()
|
||||
{
|
||||
return 0;
|
||||
Stack<PartP2PRFPower> s = THREAD_STACK.get();
|
||||
|
||||
if ( s == null )
|
||||
THREAD_STACK.set( s = new Stack<PartP2PRFPower>() );
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
private IEnergyReceiver getOutput()
|
||||
{
|
||||
if ( this.output )
|
||||
{
|
||||
if ( !this.cachedTarget )
|
||||
{
|
||||
TileEntity self = this.getTile();
|
||||
TileEntity te = self.getWorldObj().getTileEntity( self.xCoord + this.side.offsetX, self.yCoord + this.side.offsetY, self.zCoord + this.side.offsetZ );
|
||||
this.outputTarget = te instanceof IEnergyReceiver ? ( IEnergyReceiver ) te : null;
|
||||
this.cachedTarget = true;
|
||||
}
|
||||
|
||||
if ( this.outputTarget == null || !this.outputTarget.canConnectEnergy( this.side.getOpposite() ) )
|
||||
return NULL_HANDLER;
|
||||
|
||||
return this.outputTarget;
|
||||
}
|
||||
return NULL_HANDLER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnergyStored(ForgeDirection from)
|
||||
public int getEnergyStored( ForgeDirection from )
|
||||
{
|
||||
if ( output || !isActive() )
|
||||
if ( this.output || !this.isActive() )
|
||||
return 0;
|
||||
|
||||
int total = 0;
|
||||
|
||||
Stack<PartP2PRFPower> stack = getDepth();
|
||||
Stack<PartP2PRFPower> stack = this.getDepth();
|
||||
|
||||
for (PartP2PRFPower t : stack)
|
||||
for ( PartP2PRFPower t : stack )
|
||||
if ( t == this )
|
||||
return 0;
|
||||
|
||||
@@ -182,12 +200,12 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
|
||||
try
|
||||
{
|
||||
for (PartP2PRFPower t : getOutputs())
|
||||
for ( PartP2PRFPower t : this.getOutputs() )
|
||||
{
|
||||
total += t.getOutput().getEnergyStored( t.side.getOpposite() );
|
||||
}
|
||||
}
|
||||
catch (GridAccessException e)
|
||||
catch ( GridAccessException e )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -199,16 +217,16 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxEnergyStored(ForgeDirection from)
|
||||
public int getMaxEnergyStored( ForgeDirection from )
|
||||
{
|
||||
if ( output || !isActive() )
|
||||
if ( this.output || !this.isActive() )
|
||||
return 0;
|
||||
|
||||
int total = 0;
|
||||
|
||||
Stack<PartP2PRFPower> stack = getDepth();
|
||||
Stack<PartP2PRFPower> stack = this.getDepth();
|
||||
|
||||
for (PartP2PRFPower t : stack)
|
||||
for ( PartP2PRFPower t : stack )
|
||||
if ( t == this )
|
||||
return 0;
|
||||
|
||||
@@ -216,12 +234,12 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
|
||||
try
|
||||
{
|
||||
for (PartP2PRFPower t : getOutputs())
|
||||
for ( PartP2PRFPower t : this.getOutputs() )
|
||||
{
|
||||
total += t.getOutput().getMaxEnergyStored( t.side.getOpposite() );
|
||||
}
|
||||
}
|
||||
catch (GridAccessException e)
|
||||
catch ( GridAccessException e )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -232,28 +250,8 @@ public class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements cof
|
||||
return total;
|
||||
}
|
||||
|
||||
private IEnergyHandler getOutput()
|
||||
{
|
||||
if ( output )
|
||||
{
|
||||
if ( !cachedTarget )
|
||||
{
|
||||
TileEntity self = getTile();
|
||||
TileEntity te = self.getWorldObj().getTileEntity( self.xCoord + side.offsetX, self.yCoord + side.offsetY, self.zCoord + side.offsetZ );
|
||||
outputTarget = te instanceof IEnergyHandler ? (IEnergyHandler) te : null;
|
||||
cachedTarget = true;
|
||||
}
|
||||
|
||||
if ( outputTarget == null || !outputTarget.canConnectEnergy( side.getOpposite() ) )
|
||||
return myNullHandler;
|
||||
|
||||
return outputTarget;
|
||||
}
|
||||
return myNullHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConnectEnergy(ForgeDirection from)
|
||||
public boolean canConnectEnergy( ForgeDirection from )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -18,49 +18,47 @@
|
||||
|
||||
package appeng.tile.powersink;
|
||||
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.transformer.annotations.integration.Interface;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
|
||||
@Interface(iname = "RF", iface = "cofh.api.energy.IEnergyHandler")
|
||||
public abstract class RedstoneFlux extends RotaryCraft implements IEnergyHandler
|
||||
|
||||
@Interface( iname = "RF", iface = "cofh.api.energy.IEnergyReceiver" )
|
||||
public abstract class RedstoneFlux extends RotaryCraft implements IEnergyReceiver
|
||||
{
|
||||
@Override
|
||||
final public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
|
||||
final public int receiveEnergy( ForgeDirection from, int maxReceive, boolean simulate )
|
||||
{
|
||||
final int networkRFDemand = (int) Math.floor( this.getExternalPowerDemand( PowerUnits.RF, maxReceive ) );
|
||||
final int networkRFDemand = ( int ) Math.floor( this.getExternalPowerDemand( PowerUnits.RF, maxReceive ) );
|
||||
final int usedRF = Math.min( maxReceive, networkRFDemand );
|
||||
|
||||
if ( !simulate )
|
||||
{
|
||||
this.injectExternalPower( PowerUnits.RF, usedRF );
|
||||
}
|
||||
|
||||
|
||||
return usedRF;
|
||||
}
|
||||
|
||||
@Override
|
||||
final public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
|
||||
final public int getEnergyStored( ForgeDirection from )
|
||||
{
|
||||
return 0;
|
||||
return ( int ) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAECurrentPower() ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
final public boolean canConnectEnergy(ForgeDirection from)
|
||||
final public int getMaxEnergyStored( ForgeDirection from )
|
||||
{
|
||||
return ( int ) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAEMaxPower() ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
final public boolean canConnectEnergy( ForgeDirection from )
|
||||
{
|
||||
return this.getPowerSides().contains( from );
|
||||
}
|
||||
|
||||
@Override
|
||||
final public int getEnergyStored(ForgeDirection from)
|
||||
{
|
||||
return (int) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAECurrentPower() ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
final public int getMaxEnergyStored(ForgeDirection from)
|
||||
{
|
||||
return (int) Math.floor( PowerUnits.AE.convertTo( PowerUnits.RF, this.getAEMaxPower() ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ import cpw.mods.fml.relauncher.FMLRelaunchLog;
|
||||
import cpw.mods.fml.relauncher.IFMLLoadingPlugin;
|
||||
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion;
|
||||
|
||||
@MCVersion()
|
||||
@MCVersion("1.7.10")
|
||||
public class AppEngCore extends DummyModContainer implements IFMLLoadingPlugin
|
||||
{
|
||||
|
||||
|
||||
@@ -33,76 +33,76 @@ public class AdaptorPlayerInventory implements IInventory
|
||||
{
|
||||
|
||||
if ( swap )
|
||||
src = new WrapperChainedInventory( new WrapperInventoryRange( playerInv, 9, size-9, false ), new WrapperInventoryRange( playerInv, 0, 9, false ) );
|
||||
this.src = new WrapperChainedInventory( new WrapperInventoryRange( playerInv, 9, this.size -9, false ), new WrapperInventoryRange( playerInv, 0, 9, false ) );
|
||||
else
|
||||
src = playerInv;
|
||||
this.src = playerInv;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSizeInventory()
|
||||
{
|
||||
return size;
|
||||
return this.size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int var1)
|
||||
{
|
||||
return src.getStackInSlot( var1 + min );
|
||||
return this.src.getStackInSlot( var1 + this.min );
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int var1, int var2)
|
||||
{
|
||||
return src.decrStackSize( min + var1, var2 );
|
||||
return this.src.decrStackSize( this.min + var1, var2 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int var1)
|
||||
{
|
||||
return src.getStackInSlotOnClosing( min + var1 );
|
||||
return this.src.getStackInSlotOnClosing( this.min + var1 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int var1, ItemStack var2)
|
||||
{
|
||||
src.setInventorySlotContents( var1 + min, var2 );
|
||||
this.src.setInventorySlotContents( var1 + this.min, var2 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInventoryName()
|
||||
{
|
||||
return src.getInventoryName();
|
||||
return this.src.getInventoryName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInventoryStackLimit()
|
||||
{
|
||||
return src.getInventoryStackLimit();
|
||||
return this.src.getInventoryStackLimit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty()
|
||||
{
|
||||
src.markDirty();
|
||||
this.src.markDirty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseableByPlayer(EntityPlayer var1)
|
||||
{
|
||||
return src.isUseableByPlayer( var1 );
|
||||
return this.src.isUseableByPlayer( var1 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openInventory()
|
||||
{
|
||||
src.openInventory();
|
||||
this.src.openInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeInventory()
|
||||
{
|
||||
src.closeInventory();
|
||||
this.src.closeInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -114,7 +114,7 @@ public class AdaptorPlayerInventory implements IInventory
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemstack)
|
||||
{
|
||||
return true;
|
||||
return this.src.isItemValidForSlot( i, itemstack );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -468,7 +468,7 @@ achievement.ae2.SpatialIO=Spatial Coordination
|
||||
achievement.ae2.SpatialIO.desc=Craft a Spatial IO Port
|
||||
achievement.ae2.SpatialIOExplorer=To boldly go
|
||||
achievement.ae2.SpatialIOExplorer.desc=Get stored in a spatial storage cell
|
||||
achievement.ae2.StorageCell=Better Then Chests
|
||||
achievement.ae2.StorageCell=Better Than Chests
|
||||
achievement.ae2.StorageCell.desc=Craft a Storage Cell
|
||||
achievement.ae2.IOPort=Storage Cell Shuffle
|
||||
achievement.ae2.IOPort.desc=Craft a IO Port
|
||||
@@ -513,4 +513,4 @@ achievement.ae2.QNB.desc=Craft a Quantum Link
|
||||
|
||||
stat.ae2.ItemsInserted=Items added to ME Storage
|
||||
stat.ae2.ItemsExtracted=Items extracted from ME Storage
|
||||
stat.ae2.TurnedCranks=Turned Cranks
|
||||
stat.ae2.TurnedCranks=Turned Cranks
|
||||
|
||||
Reference in New Issue
Block a user