From 984d3589308b57eefd18b0517f2632ec96c3e7b8 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Fri, 29 Jun 2018 20:29:04 +0100 Subject: [PATCH] Provide .getNameLocal on modems This provides the local modem's name on the remote network. Let's be honest, I'll probably end up renaming this soon. --- .../shared/peripheral/modem/TileCable.java | 5 +++-- .../peripheral/modem/TileWiredModemFull.java | 6 ++++-- .../peripheral/modem/WiredModemPeripheral.java | 14 +++++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java index 8860a33c6..5bbcabb80 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileCable.java @@ -108,10 +108,11 @@ protected ModemPeripheral createPeripheral() m_node = m_cable.getNode(); return new WiredModemPeripheral( m_cable ) { + @Nonnull @Override - protected boolean canSeePeripheral( @Nonnull String peripheralName ) + protected WiredModemLocalPeripheral getLocalPeripheral() { - return !peripheralName.equals( m_peripheral.getConnectedName() ); + return m_peripheral; } @Nonnull diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWiredModemFull.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWiredModemFull.java index 84d205fdc..60b88afe2 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWiredModemFull.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/TileWiredModemFull.java @@ -401,12 +401,14 @@ public IPeripheral getPeripheral( EnumFacing side ) WiredModemPeripheral peripheral = m_modems[side.ordinal()]; if( peripheral == null ) { + WiredModemLocalPeripheral localPeripheral = m_peripherals[side.ordinal()]; peripheral = m_modems[side.ordinal()] = new WiredModemPeripheral( m_element ) { + @Nonnull @Override - protected boolean canSeePeripheral( @Nonnull String peripheralName ) + protected WiredModemLocalPeripheral getLocalPeripheral() { - return !peripheralName.equals( m_peripherals[side.ordinal()].getConnectedName() ); + return localPeripheral; } @Nonnull diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java index f92dc2a6c..56211c468 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java @@ -56,7 +56,8 @@ public World getWorld() return modem.getWorld(); } - protected abstract boolean canSeePeripheral( @Nonnull String peripheralName ); + @Nonnull + protected abstract WiredModemLocalPeripheral getLocalPeripheral(); //endregion //region IPeripheral @@ -65,13 +66,14 @@ public World getWorld() public String[] getMethodNames() { String[] methods = super.getMethodNames(); - String[] newMethods = new String[methods.length + 5]; + String[] newMethods = new String[methods.length + 6]; System.arraycopy( methods, 0, newMethods, 0, methods.length ); newMethods[methods.length] = "getNamesRemote"; newMethods[methods.length + 1] = "isPresentRemote"; newMethods[methods.length + 2] = "getTypeRemote"; newMethods[methods.length + 3] = "getMethodsRemote"; newMethods[methods.length + 4] = "callRemote"; + newMethods[methods.length + 5] = "getNameLocal"; return newMethods; } @@ -135,6 +137,12 @@ public Object[] callMethod( @Nonnull IComputerAccess computer, @Nonnull ILuaCont System.arraycopy( arguments, 2, methodArgs, 0, arguments.length - 2 ); return callMethodRemote( remoteName, context, methodName, methodArgs ); } + case 5: + { + // getNameLocal + String local = getLocalPeripheral().getConnectedName(); + return local == null ? null : new Object[]{ local }; + } default: { // The regular modem methods @@ -217,7 +225,7 @@ public void detachPeripheral( String name ) private void attachPeripheralImpl( String periphName, IPeripheral peripheral ) { - if( !peripheralWrappers.containsKey( periphName ) && canSeePeripheral( periphName ) ) + if( !peripheralWrappers.containsKey( periphName ) && !periphName.equals( getLocalPeripheral().getConnectedName() ) ) { RemotePeripheralWrapper wrapper = new RemotePeripheralWrapper( modem, peripheral, getComputer(), periphName ); peripheralWrappers.put( periphName, wrapper );