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

View file

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

View file

@ -29,6 +29,8 @@ import appeng.debug.ToolDebugCard;
import appeng.debug.ToolEraser; import appeng.debug.ToolEraser;
import appeng.debug.ToolMeteoritePlacer; import appeng.debug.ToolMeteoritePlacer;
import appeng.debug.ToolReplicatorCard; import appeng.debug.ToolReplicatorCard;
import appeng.hooks.DispenserBlockTool;
import appeng.hooks.DispenserMatterCannon;
import appeng.items.materials.MaterialType; import appeng.items.materials.MaterialType;
import appeng.items.misc.ItemCrystalSeed; import appeng.items.misc.ItemCrystalSeed;
import appeng.items.misc.ItemCrystalSeedRendering; 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(); this.netherQuartzKnife = netherTools.item( "nether_quartz_cutting_knife", () -> new ToolQuartzCuttingKnife( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzKnife ).build();
FeatureFactory powerTools = registry.features( AEFeature.PoweredTools ); 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.wirelessTerminal = powerTools.item( "wireless_terminal", ToolWirelessTerminal::new ).addFeatures( AEFeature.WirelessAccessTerminal ).build();
this.chargedStaff = powerTools.item( "charged_staff", ToolChargedStaff::new ).addFeatures( AEFeature.ChargedStaff ).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.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.biometricCard = registry.item( "biometric_card", ToolBiometricCard::new ).features( AEFeature.Security ).build();
this.memoryCard = registry.item( "memory_card", ToolMemoryCard::new ).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.Block;
import net.minecraft.block.BlockColored; import net.minecraft.block.BlockColored;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.BlockStainedGlass; import net.minecraft.block.BlockStainedGlass;
import net.minecraft.block.BlockStainedGlassPane; import net.minecraft.block.BlockStainedGlassPane;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -66,7 +65,6 @@ import appeng.block.networking.BlockCableBus;
import appeng.core.AEConfig; import appeng.core.AEConfig;
import appeng.core.localization.GuiText; import appeng.core.localization.GuiText;
import appeng.helpers.IMouseWheelItem; import appeng.helpers.IMouseWheelItem;
import appeng.hooks.DispenserBlockTool;
import appeng.hooks.IBlockTool; import appeng.hooks.IBlockTool;
import appeng.items.contents.CellConfig; import appeng.items.contents.CellConfig;
import appeng.items.contents.CellUpgrades; 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 @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 ) 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 java.util.Map;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.BlockTNT; import net.minecraft.block.BlockTNT;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -49,7 +48,6 @@ import net.minecraft.world.World;
import appeng.api.util.DimensionalCoord; import appeng.api.util.DimensionalCoord;
import appeng.block.misc.BlockTinyTNT; import appeng.block.misc.BlockTinyTNT;
import appeng.core.AEConfig; import appeng.core.AEConfig;
import appeng.hooks.DispenserBlockTool;
import appeng.hooks.IBlockTool; import appeng.hooks.IBlockTool;
import appeng.items.tools.powered.powersink.AEBasePoweredItem; import appeng.items.tools.powered.powersink.AEBasePoweredItem;
import appeng.util.InWorldToolOperationResult; 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 ) ) ); 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 static class InWorldToolOperationIngredient
{ {
private final IBlockState state; private final IBlockState state;

View file

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