Re-enabled custom dispenser behavior and added a convenience registration function for it.

This commit is contained in:
Sebastian Hartte 2016-08-26 00:30:58 +02:00
parent d831d1302f
commit d65263f319
6 changed files with 42 additions and 27 deletions

View File

@ -2,8 +2,10 @@ package appeng.bootstrap;
import java.util.function.Consumer;
import java.util.function.Supplier;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.dispenser.IBehaviorDispenseItem;
import net.minecraft.item.Item;
import appeng.core.features.AEFeature;
@ -31,5 +33,10 @@ public interface IItemBuilder
IItemBuilder rendering( ItemRenderingCustomizer callback );
/**
* Registers a custom dispenser behavior for this item.
*/
IItemBuilder dispenserBehavior( Supplier<IBehaviorDispenseItem> behavior );
ItemDefinition build();
}

View File

@ -8,7 +8,9 @@ import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;
import net.minecraft.block.BlockDispenser;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.dispenser.IBehaviorDispenseItem;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
@ -39,6 +41,8 @@ class ItemDefinitionBuilder implements IItemBuilder
private final List<Consumer<Item>> postInitCallbacks = new ArrayList<>();
private Supplier<IBehaviorDispenseItem> dispenserBehaviorSupplier;
@SideOnly( Side.CLIENT )
private ItemRendering itemRendering;
@ -109,6 +113,13 @@ class ItemDefinitionBuilder implements IItemBuilder
return this;
}
@Override
public IItemBuilder dispenserBehavior( Supplier<IBehaviorDispenseItem> behavior )
{
this.dispenserBehaviorSupplier = behavior;
return this;
}
@SideOnly( Side.CLIENT )
private void customizeForClient( ItemRenderingCustomizer callback )
{
@ -135,6 +146,16 @@ class ItemDefinitionBuilder implements IItemBuilder
initCallbacks.forEach( consumer -> factory.addInit( side -> consumer.accept( item ) ) );
postInitCallbacks.forEach( consumer -> factory.addPostInit( side -> consumer.accept( item ) ) );
// Register custom dispenser behavior if requested
if( dispenserBehaviorSupplier != null )
{
factory.addPostInit( side ->
{
IBehaviorDispenseItem behavior = dispenserBehaviorSupplier.get();
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject( item, behavior );
} );
}
factory.addPreInit( side -> GameRegistry.register( item ) );
if( Platform.isClient() )

View File

@ -29,6 +29,8 @@ import appeng.debug.ToolDebugCard;
import appeng.debug.ToolEraser;
import appeng.debug.ToolMeteoritePlacer;
import appeng.debug.ToolReplicatorCard;
import appeng.hooks.DispenserBlockTool;
import appeng.hooks.DispenserMatterCannon;
import appeng.items.materials.MaterialType;
import appeng.items.misc.ItemCrystalSeed;
import appeng.items.misc.ItemCrystalSeedRendering;
@ -138,12 +140,21 @@ public final class ApiItems implements IItems
this.netherQuartzKnife = netherTools.item( "nether_quartz_cutting_knife", () -> new ToolQuartzCuttingKnife( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzKnife ).build();
FeatureFactory powerTools = registry.features( AEFeature.PoweredTools );
this.entropyManipulator = powerTools.item( "entropy_manipulator", ToolEntropyManipulator::new ).addFeatures( AEFeature.EntropyManipulator ).build();
this.entropyManipulator = powerTools.item( "entropy_manipulator", ToolEntropyManipulator::new )
.addFeatures( AEFeature.EntropyManipulator )
.dispenserBehavior( DispenserBlockTool::new )
.build();
this.wirelessTerminal = powerTools.item( "wireless_terminal", ToolWirelessTerminal::new ).addFeatures( AEFeature.WirelessAccessTerminal ).build();
this.chargedStaff = powerTools.item( "charged_staff", ToolChargedStaff::new ).addFeatures( AEFeature.ChargedStaff ).build();
this.massCannon = powerTools.item( "mass_cannon", ToolMassCannon::new ).addFeatures( AEFeature.MatterCannon ).build();
this.massCannon = powerTools.item( "mass_cannon", ToolMassCannon::new )
.addFeatures( AEFeature.MatterCannon )
.dispenserBehavior( DispenserMatterCannon::new )
.build();
this.portableCell = powerTools.item( "portable_cell", ToolPortableCell::new ).addFeatures( AEFeature.PortableCell, AEFeature.StorageCells ).build();
this.colorApplicator = powerTools.item( "color_applicator", ToolColorApplicator::new ).addFeatures( AEFeature.ColorApplicator ).build();
this.colorApplicator = powerTools.item( "color_applicator", ToolColorApplicator::new )
.addFeatures( AEFeature.ColorApplicator )
.dispenserBehavior( DispenserBlockTool::new )
.build();
this.biometricCard = registry.item( "biometric_card", ToolBiometricCard::new ).features( AEFeature.Security ).build();
this.memoryCard = registry.item( "memory_card", ToolMemoryCard::new ).build();

View File

@ -29,7 +29,6 @@ import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.block.BlockColored;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.BlockStainedGlass;
import net.minecraft.block.BlockStainedGlassPane;
import net.minecraft.block.state.IBlockState;
@ -66,7 +65,6 @@ import appeng.block.networking.BlockCableBus;
import appeng.core.AEConfig;
import appeng.core.localization.GuiText;
import appeng.helpers.IMouseWheelItem;
import appeng.hooks.DispenserBlockTool;
import appeng.hooks.IBlockTool;
import appeng.items.contents.CellConfig;
import appeng.items.contents.CellUpgrades;
@ -108,12 +106,6 @@ public class ToolColorApplicator extends AEBasePoweredItem implements IStorageCe
}
}
public void postInit()
{
// TODO BOOTSTRAP
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject( this, new DispenserBlockTool() );
}
@Override
public boolean onItemUse( final ItemStack is, final EntityPlayer p, final World w, final BlockPos pos, final EnumFacing side, final float hitX, final float hitY, final float hitZ )
{

View File

@ -25,7 +25,6 @@ import java.util.List;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.BlockTNT;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
@ -49,7 +48,6 @@ import net.minecraft.world.World;
import appeng.api.util.DimensionalCoord;
import appeng.block.misc.BlockTinyTNT;
import appeng.core.AEConfig;
import appeng.hooks.DispenserBlockTool;
import appeng.hooks.IBlockTool;
import appeng.items.tools.powered.powersink.AEBasePoweredItem;
import appeng.util.InWorldToolOperationResult;
@ -85,12 +83,6 @@ public class ToolEntropyManipulator extends AEBasePoweredItem implements IBlockT
this.heatUp.put( new InWorldToolOperationIngredient( Blocks.SNOW, true ), new InWorldToolOperationResult( new ItemStack( Blocks.FLOWING_WATER ) ) );
}
public void postInit()
{
// TODO BOOTSTRAP
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject( this, new DispenserBlockTool() );
}
private static class InWorldToolOperationIngredient
{
private final IBlockState state;

View File

@ -23,7 +23,6 @@ import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
@ -67,7 +66,6 @@ import appeng.core.localization.GuiText;
import appeng.core.localization.PlayerMessages;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketMatterCannon;
import appeng.hooks.DispenserMatterCannon;
import appeng.hooks.TickHandler;
import appeng.hooks.TickHandler.PlayerColor;
import appeng.items.contents.CellConfig;
@ -88,12 +86,6 @@ public class ToolMassCannon extends AEBasePoweredItem implements IStorageCell
super( AEConfig.instance.matterCannonBattery );
}
public void postInit()
{
// TODO BOOTSTRAP
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject( this, new DispenserMatterCannon() );
}
@Override
public void addCheckedInformation( final ItemStack stack, final EntityPlayer player, final List<String> lines, final boolean displayMoreInfo )
{