Skip to content

Commit 1e31ed9

Browse files
committedJul 5, 2014
Radar block!!!
- Yep, radar block implemented. Its primary (and only) function is getEntities(), which seeks out all living entities within a configurable range (default is 32 blocks in X and Z directions) and return the results in a table showing the name and coordinates of the entity. - For some reason, it's not picking up players? Players must not be considered living entities then :V Will be looking into this one. - Tweaked jaquadro's fix from last night to actually compile properly. But it seems that the pick block action isn't getting the subBlock?
1 parent 6b26a27 commit 1e31ed9

File tree

5 files changed

+131
-1
lines changed

5 files changed

+131
-1
lines changed
 

Diff for: ‎src/main/java/pl/asie/computronics/Computronics.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import pl.asie.computronics.block.BlockChatBox;
1313
import pl.asie.computronics.block.BlockCipher;
1414
import pl.asie.computronics.block.BlockIronNote;
15+
import pl.asie.computronics.block.BlockRadar;
1516
import pl.asie.computronics.block.BlockSorter;
1617
import pl.asie.computronics.block.BlockTapeReader;
1718
import pl.asie.computronics.gui.GuiOneSlot;
@@ -24,6 +25,7 @@
2425
import pl.asie.computronics.tile.TileChatBox;
2526
import pl.asie.computronics.tile.TileCipherBlock;
2627
import pl.asie.computronics.tile.TileIronNote;
28+
import pl.asie.computronics.tile.TileRadar;
2729
import pl.asie.computronics.tile.TileTapeDrive;
2830
import pl.asie.computronics.tile.sorter.TileSorter;
2931
import pl.asie.lib.gui.GuiHandler;
@@ -60,7 +62,7 @@
6062
import cpw.mods.fml.common.registry.GameRegistry;
6163
import cpw.mods.fml.relauncher.Side;
6264

63-
@Mod(modid="computronics", name="Computronics", version="0.4.2", dependencies="required-after:asielib;after:OpenPeripheralCore;after:ComputerCraft;after:OpenComputers;after:OpenComputers|Core;after:BuildCraft|Core")
65+
@Mod(modid="computronics", name="Computronics", version="0.5.0", dependencies="required-after:asielib;after:OpenPeripheralCore;after:ComputerCraft;after:OpenComputers;after:OpenComputers|Core;after:BuildCraft|Core")
6466
public class Computronics {
6567
public Configuration config;
6668
public static Random rand = new Random();
@@ -77,6 +79,7 @@ public class Computronics {
7779
public static int CAMERA_DISTANCE = 32;
7880
public static int TAPEDRIVE_DISTANCE = 24;
7981
public static int BUFFER_MS = 750;
82+
public static int RADAR_RANGE = 32;
8083
public static String CHATBOX_PREFIX = "[ChatBox]";
8184
public static String TAPE_LENGTHS;
8285
public static boolean CAMERA_REDSTONE_REFRESH, CHATBOX_ME_DETECT, CHATBOX_CREATIVE;
@@ -90,6 +93,7 @@ public class Computronics {
9093
public static BlockChatBox chatBox;
9194
public static BlockSorter sorter;
9295
public static BlockCipher cipher;
96+
public static BlockRadar radar;
9397

9498
public static ItemTape itemTape;
9599
public static ItemMultiple itemParts;
@@ -123,6 +127,7 @@ public void preInit(FMLPreInitializationEvent event) {
123127
CHATBOX_CREATIVE = config.get("chatbox", "enableCreative", true).getBoolean(true);
124128
TAPEDRIVE_DISTANCE = config.get("tapedrive", "hearingDistance", 24).getInt();
125129
TAPE_LENGTHS = config.get("tapedrive", "tapeLengths", "4,8,16,32,64,2,6,16,128").getString();
130+
RADAR_RANGE = config.get("radar", "maxRange", 32).getInt();
126131

127132
config.get("camera", "sendRedstoneSignal", true).comment = "Setting this to false might help Camera tick lag issues, at the cost of making them useless with redstone circuitry.";
128133

@@ -149,13 +154,18 @@ public void preInit(FMLPreInitializationEvent event) {
149154
cipher = new BlockCipher();
150155
GameRegistry.registerBlock(cipher, "computronics.cipher");
151156
GameRegistry.registerTileEntity(TileCipherBlock.class, "computronics.cipher");
157+
158+
radar = new BlockRadar();
159+
GameRegistry.registerBlock(radar, "computronics.radar");
160+
GameRegistry.registerTileEntity(TileRadar.class, "computronics.radar");
152161

153162
if(Loader.isModLoaded("OpenPeripheralCore")) {
154163
OpenPeripheralAPI.createAdapter(TileTapeDrive.class);
155164
OpenPeripheralAPI.createAdapter(TileIronNote.class);
156165
OpenPeripheralAPI.createAdapter(TileCamera.class);
157166
//OpenPeripheralAPI.createAdapter(TileSorter.class);
158167
OpenPeripheralAPI.createAdapter(TileCipherBlock.class);
168+
OpenPeripheralAPI.createAdapter(TileRadar.class);
159169
}
160170

161171
itemTape = new ItemTape(TAPE_LENGTHS);
@@ -188,6 +198,7 @@ public void init(FMLInitializationEvent event) {
188198
GameRegistry.addShapedRecipe(new ItemStack(ironNote, 1, 0), "iii", "ini", "iii", 'i', Items.iron_ingot, 'n', Blocks.noteblock);
189199
GameRegistry.addShapedRecipe(new ItemStack(tapeReader, 1, 0), "iii", "iri", "iai", 'i', Items.iron_ingot, 'r', Items.redstone, 'a', ironNote);
190200
GameRegistry.addShapedRecipe(new ItemStack(cipher, 1, 0), "sss", "srs", "eie", 'i', Items.iron_ingot, 'r', Items.redstone, 'e', Items.ender_pearl, 's', Blocks.stonebrick);
201+
GameRegistry.addShapedRecipe(new ItemStack(radar, 1, 0), "sts", "rbr", "scs", 'i', Items.iron_ingot, 'r', Items.redstone, 't', Blocks.redstone_torch, 's', Blocks.stonebrick, 'b', Items.bowl, 'c', Items.comparator);
191202
// Tape recipes
192203
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(itemTape, 1, 0),
193204
" i ", "iii", " T ", 'T', new ItemStack(itemParts, 1, 0), 'i', Items.iron_ingot));

Diff for: ‎src/main/java/pl/asie/computronics/block/BlockChatBox.java

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import pl.asie.computronics.tile.TileChatBox;
1919
import pl.asie.computronics.tile.TileIronNote;
2020
import pl.asie.lib.block.BlockBase;
21+
import net.minecraft.world.IBlockAccess;
2122

2223
public class BlockChatBox extends BlockMachineSidedIcon {
2324
private IIcon mSide;
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package pl.asie.computronics.block;
2+
3+
import java.util.logging.Level;
4+
import java.util.List;
5+
6+
import cpw.mods.fml.relauncher.Side;
7+
import cpw.mods.fml.relauncher.SideOnly;
8+
import net.minecraft.block.material.Material;
9+
import net.minecraft.block.Block;
10+
import net.minecraft.item.Item;
11+
import net.minecraft.creativetab.CreativeTabs;
12+
import net.minecraft.item.ItemStack;
13+
import net.minecraft.client.renderer.texture.IIconRegister;
14+
import net.minecraft.tileentity.TileEntity;
15+
import net.minecraft.util.IIcon;
16+
import net.minecraft.world.World;
17+
import pl.asie.computronics.Computronics;
18+
import pl.asie.computronics.tile.TileRadar;
19+
import pl.asie.computronics.tile.TileIronNote;
20+
import pl.asie.lib.block.BlockBase;
21+
22+
public class BlockRadar extends BlockMachineSidedIcon {
23+
private IIcon mSide;
24+
25+
public BlockRadar() {
26+
super();
27+
this.setCreativeTab(Computronics.tab);
28+
this.setIconName("computronics:radar");
29+
this.setBlockName("computronics.radar");
30+
}
31+
32+
@Override
33+
public TileEntity createNewTileEntity(World world, int metadata) {
34+
return new TileRadar();
35+
}
36+
37+
@Override
38+
@SideOnly(Side.CLIENT)
39+
public IIcon getAbsoluteSideIcon(int sideNumber, int metadata) {
40+
return mSide;
41+
}
42+
43+
@Override
44+
@SideOnly(Side.CLIENT)
45+
public void registerBlockIcons(IIconRegister r) {
46+
super.registerBlockIcons(r);
47+
mSide = r.registerIcon("computronics:radar_side");
48+
}
49+
}
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package pl.asie.computronics.tile;
2+
3+
import li.cil.oc.api.network.Arguments;
4+
import li.cil.oc.api.network.Callback;
5+
import li.cil.oc.api.network.Context;
6+
import li.cil.oc.api.network.SimpleComponent;
7+
import net.minecraft.entity.EntityLiving;
8+
import net.minecraft.util.AxisAlignedBB;
9+
import pl.asie.lib.block.TileEntityBase;
10+
import pl.asie.computronics.Computronics;
11+
12+
import java.util.ArrayList;
13+
import java.util.HashMap;
14+
import java.util.List;
15+
import java.util.Map;
16+
17+
public class TileRadar extends TileEntityBase implements SimpleComponent {
18+
public static final double RadarRange = Computronics.RADAR_RANGE;
19+
20+
protected boolean isEnabled = true;
21+
22+
@Override
23+
public String getComponentName() {
24+
return "radar";
25+
}
26+
27+
@Callback
28+
public Object[] getEntities(Context context, Arguments args) {
29+
List<Map> entities = new ArrayList<Map>();
30+
if (isEnabled) {
31+
// Get a initial list of entities near the tile entity.
32+
AxisAlignedBB bounds = AxisAlignedBB.
33+
getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1).
34+
expand(RadarRange, RadarRange, RadarRange);
35+
for (Object obj : getWorldObj().getEntitiesWithinAABB(EntityLiving.class, bounds)) {
36+
EntityLiving entity = (EntityLiving) obj;
37+
double dx = entity.posX - (xCoord + 0.5);
38+
double dy = entity.posY - (yCoord + 0.5);
39+
double dz = entity.posZ - (zCoord + 0.5);
40+
// Check if the entity is actually in range.
41+
if (Math.sqrt(dx * dx + dz * dz) < RadarRange) {
42+
// Maps are converted to tables on the Lua side.
43+
Map<String, Object> entry = new HashMap<String, Object>();
44+
if (entity.hasCustomNameTag()) {
45+
entry.put("name", entity.getCustomNameTag());
46+
}
47+
else {
48+
entry.put("name", entity.getCommandSenderName());
49+
}
50+
entry.put("x", (int) dx);
51+
entry.put("y", (int) dy);
52+
entry.put("z", (int) dz);
53+
entities.add(entry);
54+
}
55+
}
56+
context.pause(0.5);
57+
}
58+
59+
// The returned array is treated as a tuple, meaning if we return the
60+
// entities as an array directly, we'd end up with each entity as an
61+
// individual result value (i.e. in Lua we'd have to write
62+
// result = {radar.getEntities()}
63+
// and we'd be limited in the number of entities, due to the limit of
64+
// return values. So we wrap it in an array to return it as a list.
65+
return new Object[]{entities.toArray()};
66+
}
67+
}

Diff for: ‎src/main/resources/assets/computronics/lang/en_US.lang

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ tile.computronics.chatBox.name=Chat Box
55
tile.computronics.chatBox.creative.name=Creative Chat Box
66
tile.computronics.sorter.name=Sorter
77
tile.computronics.cipher.name=Cipher Block
8+
tile.computronics.radar.name=Radar Block
89

910
tooltip.computronics.chatBox.creative=NSA in a box!
1011
tooltip.computronics.tape.length=Length: %s minutes
@@ -14,6 +15,7 @@ tooltip.computronics.tape.none=No Tape
1415

1516
item.computronics.robot_upgrade_camera.name=Camera Upgrade
1617
item.computronics.robot_upgrade_chatbox.name=Chat Upgrade
18+
item.computronics.robot_upgrade_radar.name=Radar Upgrade
1719
item.computronics.part_tape_track.name=Tape Track
1820
item.computronics.tape.name=Cassette Tape
1921

0 commit comments

Comments
 (0)
Please sign in to comment.