Files
Applied-Energistics-2/src/main/java/appeng/items/tools/ToolMemoryCard.java
T
2020-06-02 19:15:23 +02:00

242 lines
6.3 KiB
Java

/*
* 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.items.tools;
import java.util.List;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import appeng.api.implementations.items.IMemoryCard;
import appeng.api.implementations.items.MemoryCardMessages;
import appeng.api.util.AEColor;
import appeng.core.localization.GuiText;
import appeng.core.localization.PlayerMessages;
import appeng.items.AEBaseItem;
import appeng.util.Platform;
public class ToolMemoryCard extends AEBaseItem implements IMemoryCard
{
private static final AEColor[] DEFAULT_COLOR_CODE = new AEColor[] {
AEColor.TRANSPARENT,
AEColor.TRANSPARENT,
AEColor.TRANSPARENT,
AEColor.TRANSPARENT,
AEColor.TRANSPARENT,
AEColor.TRANSPARENT,
AEColor.TRANSPARENT,
AEColor.TRANSPARENT,
};
public ToolMemoryCard()
{
super( new Properties().maxStackSize( 1 ) );
}
@Override
@OnlyIn( Dist.CLIENT )
public void addInformation( final ItemStack stack, final World world, final List<ITextComponent> lines, final ITooltipFlag advancedTooltips )
{
lines.add( this.getLocalizedName( this.getSettingsName( stack ) + ".name", this.getSettingsName( stack ) ) );
final CompoundNBT data = this.getData( stack );
if( data.contains( "tooltip" ) )
{
lines.add( I18n.translateToLocal( this.getLocalizedName( data.getString( "tooltip" ) + ".name", data.getString( "tooltip" ) ) ) );
}
if( data.contains( "freq" ) )
{
final short freq = data.getShort( "freq" );
final String freqTooltip = TextFormatting.BOLD + Platform.p2p().toHexString( freq );
lines.add( I18n.translateToLocalFormatted( "gui.tooltips.appliedenergistics2.P2PFrequency", freqTooltip ) );
}
}
/**
* Find the localized string...
*
* @param name possible names for the localized string
*
* @return localized name
*/
private String getLocalizedName( final String... name )
{
for( final String n : name )
{
final String l = I18n.translateToLocal( n );
if( !l.equals( n ) )
{
return l;
}
}
for( final String n : name )
{
return n;
}
return "";
}
@Override
public void setMemoryCardContents( final ItemStack is, final String settingsName, final CompoundNBT data )
{
final CompoundNBT c = is.getOrCreateTag();
c.putString( "Config", settingsName );
c.put( "Data", data );
}
@Override
public String getSettingsName( final ItemStack is )
{
final CompoundNBT c = is.getOrCreateTag();
final String name = c.getString( "Config" );
return name == null || name.isEmpty() ? GuiText.Blank.getUnlocalized() : name;
}
@Override
public CompoundNBT getData( final ItemStack is )
{
final CompoundNBT c = is.getOrCreateTag();
CompoundNBT o = c.getCompound( "Data" );
if( o == null )
{
o = new CompoundNBT();
}
return o.copy();
}
@Override
public AEColor[] getColorCode( ItemStack is )
{
final CompoundNBT tag = this.getData( is );
if( tag.contains( "colorCode" ) )
{
final int[] frequency = tag.getIntArray( "colorCode" );
final AEColor[] colorArray = AEColor.values();
return new AEColor[] {
colorArray[frequency[0]],
colorArray[frequency[1]],
colorArray[frequency[2]],
colorArray[frequency[3]],
colorArray[frequency[4]],
colorArray[frequency[5]],
colorArray[frequency[6]],
colorArray[frequency[7]],
};
}
return DEFAULT_COLOR_CODE;
}
@Override
public void notifyUser( final PlayerEntity player, final MemoryCardMessages msg )
{
if( Platform.isClient() )
{
return;
}
switch( msg )
{
case SETTINGS_CLEARED:
player.sendMessage( PlayerMessages.SettingCleared.get() );
break;
case INVALID_MACHINE:
player.sendMessage( PlayerMessages.InvalidMachine.get() );
break;
case SETTINGS_LOADED:
player.sendMessage( PlayerMessages.LoadedSettings.get() );
break;
case SETTINGS_SAVED:
player.sendMessage( PlayerMessages.SavedSettings.get() );
break;
case SETTINGS_RESET:
player.sendMessage( PlayerMessages.ResetSettings.get() );
break;
default:
}
}
@Override
public ActionResultType onItemUse( ItemUseContext context )
{
if( context.getPlayer().isCrouching() )
{
if( !context.getPlayer().world.isRemote )
{
this.clearCard( context.getPlayer(), context.getWorld(), context.getHand() );
}
return ActionResultType.SUCCESS;
}
else
{
return super.onItemUse( context );
}
}
@Override
public ActionResult<ItemStack> onItemRightClick( World w, PlayerEntity player, Hand hand )
{
if( player.isCrouching() )
{
if( !w.isRemote )
{
this.clearCard( player, w, hand );
}
}
return super.onItemRightClick( w, player, hand );
}
@Override
public boolean doesSneakBypassUse( ItemStack stack, IWorldReader world, BlockPos pos, PlayerEntity player )
{
return true;
}
private void clearCard( final PlayerEntity player, final World w, final Hand hand )
{
final IMemoryCard mem = (IMemoryCard) player.getHeldItem( hand ).getItem();
mem.notifyUser( player, MemoryCardMessages.SETTINGS_CLEARED );
player.getHeldItem( hand ).setTag( null );
}
}