Fixes #861 Wireless Terminal notifies player, if it is unlinked

This commit is contained in:
thatsIch 2015-03-09 17:53:57 +01:00
parent 63a6037ad2
commit dd1ca1e286
5 changed files with 62 additions and 20 deletions

View file

@ -23,19 +23,31 @@
package appeng.api.features; package appeng.api.features;
/** /**
* A Registry for locatable items, works based on serial numbers. * A Registry for locatable items, works based on serial numbers.
*/ */
public interface ILocatableRegistry public interface ILocatableRegistry
{ {
/** /**
* Attempts to find the object with the serial specified, if it can it * Attempts to find the object with the serial specified, if it can it
* returns the object. * returns the object.
* *
* @param serial serial * @param serial serial
*
* @return requestedObject, or null * @return requestedObject, or null
*
* @deprecated use {@link ILocatableRegistry#getLocatableBy(long)}
*/ */
public abstract Object findLocatableBySerial(long serial); @Deprecated
Object findLocatableBySerial( long serial );
/**
* Gets the {@link ILocatable} with the registered serial, if available
*
* @param serial serial
*
* @return requestedObject, or null, if the object does not exist anymore
*/
ILocatable getLocatableBy( long serial );
} }

View file

@ -18,7 +18,9 @@
package appeng.core.features.registries; package appeng.core.features.registries;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
@ -30,13 +32,19 @@ import appeng.api.features.ILocatable;
import appeng.api.features.ILocatableRegistry; import appeng.api.features.ILocatableRegistry;
import appeng.util.Platform; import appeng.util.Platform;
public class LocatableRegistry implements ILocatableRegistry
{
private final HashMap<Long, ILocatable> set; public final class LocatableRegistry implements ILocatableRegistry
{
private final Map<Long, ILocatable> set;
public LocatableRegistry()
{
this.set = new HashMap<Long, ILocatable>();
MinecraftForge.EVENT_BUS.register( this );
}
@SubscribeEvent @SubscribeEvent
public void updateLocatable(LocatableEventAnnounce e) public void updateLocatable( LocatableEventAnnounce e )
{ {
if ( Platform.isClient() ) if ( Platform.isClient() )
return; // IGNORE! return; // IGNORE!
@ -51,18 +59,18 @@ public class LocatableRegistry implements ILocatableRegistry
} }
} }
public LocatableRegistry() {
this.set = new HashMap<Long, ILocatable>();
MinecraftForge.EVENT_BUS.register( this );
}
/** /**
* Find a locate-able object by its serial. * Find a locate-able object by its serial.
*/ */
@Override @Override
public Object findLocatableBySerial(long ser) public Object findLocatableBySerial( long ser )
{ {
return this.set.get( ser ); return this.set.get( ser );
} }
@Override
public ILocatable getLocatableBy( long serial )
{
return this.set.get( serial );
}
} }

View file

@ -18,24 +18,25 @@
package appeng.core.features.registries; package appeng.core.features.registries;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World; import net.minecraft.world.World;
import appeng.api.AEApi;
import appeng.api.features.ILocatable;
import appeng.api.features.IWirelessTermHandler; import appeng.api.features.IWirelessTermHandler;
import appeng.api.features.IWirelessTermRegistry; import appeng.api.features.IWirelessTermRegistry;
import appeng.core.localization.PlayerMessages; import appeng.core.localization.PlayerMessages;
import appeng.core.sync.GuiBridge; import appeng.core.sync.GuiBridge;
import appeng.util.Platform; import appeng.util.Platform;
public class WirelessRegistry implements IWirelessTermRegistry public final class WirelessRegistry implements IWirelessTermRegistry
{ {
private final List<IWirelessTermHandler> handlers;
final List<IWirelessTermHandler> handlers;
public WirelessRegistry() { public WirelessRegistry() {
this.handlers = new ArrayList<IWirelessTermHandler>(); this.handlers = new ArrayList<IWirelessTermHandler>();
@ -76,10 +77,25 @@ public class WirelessRegistry implements IWirelessTermRegistry
if ( Platform.isClient() ) if ( Platform.isClient() )
return; return;
IWirelessTermHandler handler = this.getWirelessTerminalHandler( item ); if ( !this.isWirelessTerminal( item ) )
if ( handler == null )
{ {
player.addChatMessage( new ChatComponentText( "Item is not a wireless terminal." ) ); player.addChatMessage( PlayerMessages.DeviceNotWirelessTerminal.get() );
return;
}
final IWirelessTermHandler handler = this.getWirelessTerminalHandler( item );
final String unparsedKey = handler.getEncryptionKey( item );
if ( unparsedKey.length() == 0 )
{
player.addChatMessage( PlayerMessages.DeviceNotLinked.get() );
return;
}
final long parsedKey = Long.parseLong( unparsedKey );
final ILocatable securityStation = AEApi.instance().registries().locatable().getLocatableBy( parsedKey );
if ( securityStation == null )
{
player.addChatMessage( PlayerMessages.StationCanNotBeLocated.get() );
return; return;
} }

View file

@ -25,7 +25,10 @@ public enum PlayerMessages
{ {
ChestCannotReadStorageCell, InvalidMachine, LoadedSettings, SavedSettings, MachineNotPowered, ChestCannotReadStorageCell, InvalidMachine, LoadedSettings, SavedSettings, MachineNotPowered,
isNowLocked, isNowUnlocked, AmmoDepleted, CommunicationError, OutOfRange, DeviceNotPowered, SettingCleared; isNowLocked, isNowUnlocked,
AmmoDepleted,
CommunicationError, OutOfRange, DeviceNotPowered, DeviceNotWirelessTerminal, DeviceNotLinked, StationCanNotBeLocated,
SettingCleared,;
String getName() String getName()
{ {

View file

@ -66,6 +66,9 @@ chat.appliedenergistics2.OutOfRange=Wireless Out Of Range.
chat.appliedenergistics2.InvalidMachine=Invalid Machine. chat.appliedenergistics2.InvalidMachine=Invalid Machine.
chat.appliedenergistics2.LoadedSettings=Successfully loaded settings. chat.appliedenergistics2.LoadedSettings=Successfully loaded settings.
chat.appliedenergistics2.DeviceNotPowered=Device is low on power. chat.appliedenergistics2.DeviceNotPowered=Device is low on power.
chat.appliedenergistics2.DeviceNotWirelessTerminal=Device is not a wireless terminal.
chat.appliedenergistics2.DeviceNotLinked=Device is not linked.
chat.appliedenergistics2.StationCanNotBeLocated=Station can not be located.
chat.appliedenergistics2.MachineNotPowered=Machine is not powered. chat.appliedenergistics2.MachineNotPowered=Machine is not powered.
chat.appliedenergistics2.CommunicationError=Error Communicating with Network. chat.appliedenergistics2.CommunicationError=Error Communicating with Network.
chat.appliedenergistics2.SavedSettings=Successfully saved settings. chat.appliedenergistics2.SavedSettings=Successfully saved settings.