Skip to content

Commit 802771c

Browse files
committed
added serial messages to arduino
1 parent 1574110 commit 802771c

File tree

11 files changed

+226
-22
lines changed

11 files changed

+226
-22
lines changed

src/main/java/org/cmbozeman/forge/mods/serialcraft/BlockSendSerialMessage.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import net.minecraft.block.BlockContainer;
77
import net.minecraft.block.material.Material;
88
import net.minecraft.creativetab.CreativeTabs;
9+
import net.minecraft.entity.EntityLivingBase;
910
import net.minecraft.init.Blocks;
11+
import net.minecraft.item.ItemStack;
1012
import net.minecraft.tileentity.TileEntity;
1113
import net.minecraft.world.IBlockAccess;
1214
import net.minecraft.world.World;
@@ -23,13 +25,11 @@ public BlockSendSerialMessage()
2325

2426

2527
@Override()
26-
public void onBlockAdded(World world, int x, int y, int z) {
27-
super.onBlockAdded(world,x,y,z);
28-
if (!world.isRemote)
29-
{
30-
// Minecraft.getMinecraft().displayGuiScreen(new GuiSerialRedstone((TileEntitySerialRedstone)world.getTileEntity(x, y, z)));
31-
}
28+
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemstack) {
29+
super.onBlockPlacedBy(world, x, y, z, entity, itemstack);
30+
SerialCraft.proxy.openSerialRedstoneGUI(world, x, y, z);
3231
}
32+
3333

3434
@Override()
3535
public void onNeighborBlockChange(World world, int x, int y, int z, Block b) {

src/main/java/org/cmbozeman/forge/mods/serialcraft/ClientProxy.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
public class ClientProxy extends CommonProxy {
1111
private static MovementController movementController;
1212
private static SerialCraftListener serialCraftListener;
13+
private static ClientState clientState;
14+
15+
public static ClientState getClientState() {
16+
return clientState;
17+
}
1318

1419
public static MovementController getMovementController() {
1520
return movementController;
@@ -35,14 +40,16 @@ public void init(FMLInitializationEvent event) {
3540
SerialCraftClientEventHandling events = new SerialCraftClientEventHandling();
3641

3742
MinecraftForge.EVENT_BUS.register(events);
43+
FMLCommonHandler.instance().bus().register(events);
3844
serialCraftListener = new SerialCraftListener();
3945
movementController = new MovementController();
46+
clientState = new ClientState();
4047
}
4148

4249
@Override
4350
public void openSerialRedstoneGUI(World world, int x, int y, int z) {
4451
if(world.isRemote) {
45-
Minecraft.getMinecraft().displayGuiScreen(new GuiSerialRedstone((TileEntitySerialRedstone)world.getTileEntity(x, y, z)));
52+
Minecraft.getMinecraft().displayGuiScreen(new GuiSerialRedstone(world.getTileEntity(x, y, z)));
4653
}
4754
}
4855

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.cmbozeman.forge.mods.serialcraft;
2+
3+
public class ClientState {
4+
private float health;
5+
private int foodLevel;
6+
private int air;
7+
private int distanceToCreeper;
8+
9+
public ClientState() {
10+
health = 20;
11+
air = 300;
12+
distanceToCreeper = -1;
13+
}
14+
15+
public int getFoodLevel() {
16+
return foodLevel;
17+
}
18+
19+
public boolean setFoodLevel(int f) {
20+
if(f != foodLevel) {
21+
foodLevel = f;
22+
return true;
23+
}
24+
return false;
25+
}
26+
public int getAir() {
27+
return air;
28+
}
29+
30+
public boolean setAir(int a) {
31+
if(a < 0) a = 0;
32+
33+
if(a != air) {
34+
air = a;
35+
return true;
36+
}
37+
return false;
38+
}
39+
40+
public int getDistanceToCreeper() {
41+
return distanceToCreeper;
42+
}
43+
44+
public boolean setDistanceToCreeper(int d) {
45+
if(distanceToCreeper != d) {
46+
distanceToCreeper = d;
47+
return true;
48+
}
49+
return false;
50+
}
51+
52+
public float getHealth() {
53+
return health;
54+
}
55+
56+
public boolean setHealth(float h) {
57+
if(health != h) {
58+
health = h;
59+
return true;
60+
}
61+
return false;
62+
}
63+
}

src/main/java/org/cmbozeman/forge/mods/serialcraft/GuiSerialRedstone.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
package org.cmbozeman.forge.mods.serialcraft;
22

3-
import cpw.mods.fml.relauncher.Side;
4-
import cpw.mods.fml.relauncher.SideOnly;
53
import net.minecraft.client.gui.GuiButton;
64
import net.minecraft.client.gui.GuiScreen;
75
import net.minecraft.client.gui.GuiTextField;
86
import net.minecraft.client.resources.I18n;
7+
import net.minecraft.tileentity.TileEntity;
98

109
public class GuiSerialRedstone extends GuiScreen {
1110
private GuiButton buttonDone;
1211
private GuiTextField textField;
1312
private String redstoneID;
1413

15-
private TileEntitySerialRedstone tileEntity;
14+
private TileEntity tileEntity;
1615

1716

18-
public GuiSerialRedstone(TileEntitySerialRedstone te) {
17+
public GuiSerialRedstone(TileEntity te) {
1918
tileEntity = te;
2019
}
2120

src/main/java/org/cmbozeman/forge/mods/serialcraft/SerialCraft.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class SerialCraft {
1616
public static SerialCraft instance;
1717

1818
public static final String MODID = "SerialCraft";
19-
public static final String VERSION = "1.7.10-0.1";
19+
public static final String VERSION = "1.7.10-0.2-dev";
2020

2121
public static SimpleNetworkWrapper network;
2222

src/main/java/org/cmbozeman/forge/mods/serialcraft/SerialCraftClientEventHandling.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.cmbozeman.forge.mods.serialcraft;
22

3+
import java.util.List;
4+
35
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
4-
import cpw.mods.fml.common.gameevent.TickEvent;
6+
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
7+
import net.minecraft.client.Minecraft;
58
import net.minecraft.client.entity.EntityClientPlayerMP;
9+
import net.minecraft.entity.monster.EntityCreeper;
610

711
// Minecraft client side event handing
812
public class SerialCraftClientEventHandling {
@@ -35,6 +39,42 @@ public void onTimeEvent(SerialCraftTimeEvent event) {
3539
}
3640
}
3741

42+
@SubscribeEvent
43+
public void onTickEvent(ClientTickEvent event) {
44+
if (!Minecraft.getMinecraft().isGamePaused() && Minecraft.getMinecraft().thePlayer != null) {
45+
SerialCraftListener serial = ClientProxy.getSerialCraftListener();
46+
ClientState state = ClientProxy.getClientState();
47+
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
48+
List entities = Minecraft.getMinecraft().theWorld.loadedEntityList;
49+
int closestCreeper = 255;
50+
for(int i = 0; i < entities.size(); i++) {
51+
if(entities.get(i) instanceof EntityCreeper) {
52+
int dist = (int)player.getDistanceToEntity((EntityCreeper)entities.get(i));
53+
if(dist < closestCreeper) {
54+
closestCreeper = dist;
55+
}
56+
57+
}
58+
}
59+
//System.out.println("closest creeper: " + closestCreeper);
60+
if(state.setDistanceToCreeper(closestCreeper)) {
61+
serial.sendCreeperMessage(state.getDistanceToCreeper());
62+
}
63+
if(state.setHealth(player.getHealth())) {
64+
serial.sendHealthMessage((int)player.getHealth());
65+
}
66+
67+
if(state.setFoodLevel(player.getFoodStats().getFoodLevel())) {
68+
serial.sendFoodLevelMessage(state.getFoodLevel());
69+
}
70+
71+
if(state.setAir(player.getAir())) {
72+
serial.sendAirMessage(player.getAir());
73+
}
74+
75+
}
76+
}
77+
3878
// @SubscribeEvent
3979
// public void onSendSerialMessage(SerialCraftSenderSerialMessageEvent event) {
4080
//

src/main/java/org/cmbozeman/forge/mods/serialcraft/SerialCraftListener.java

Lines changed: 88 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package org.cmbozeman.forge.mods.serialcraft;
22

3+
import java.io.ByteArrayOutputStream;
4+
import java.io.IOException;
5+
import java.io.UnsupportedEncodingException;
36
import java.util.HashMap;
4-
import java.util.List;
57
import java.util.Map;
68

79
import jssc.SerialPortException;
810
import jssc.SerialPortList;
911
import net.minecraft.client.Minecraft;
10-
import net.minecraft.client.settings.GameSettings;
11-
import net.minecraft.client.settings.KeyBinding;
12+
import net.minecraft.client.entity.EntityClientPlayerMP;
1213
import net.minecraftforge.common.MinecraftForge;
1314

1415
// Client side management of serial ports
@@ -102,6 +103,22 @@ public void handler(String arg) {
102103
}
103104
});
104105

106+
handlers.put("update_player_info", new SerialEventHandler() {
107+
public void handler(String arg) {
108+
System.out.println("in update player info");
109+
SerialCraftListener serial = ClientProxy.getSerialCraftListener();
110+
ClientState state = ClientProxy.getClientState();
111+
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
112+
state.setHealth(player.getHealth());
113+
state.setFoodLevel(player.getFoodStats().getFoodLevel());
114+
state.setAir(player.getAir());
115+
116+
serial.sendHealthMessage((int)player.getHealth());
117+
serial.sendFoodLevelMessage(state.getFoodLevel());
118+
serial.sendAirMessage(player.getAir());
119+
}
120+
});
121+
105122
handlers.put("start_jumping", new SerialEventHandler() {
106123
public void handler(String arg) {
107124
ClientProxy.getMovementController().startJumping();
@@ -174,7 +191,7 @@ public void triggerEvent(String str) {
174191
args = str.substring(index+1);
175192
}
176193

177-
//System.out.println("received message: " + msg + ", with args: " + args);
194+
System.out.println("received message: " + msg + ", with args: " + args);
178195

179196
SerialEventHandler h = handlers.get(msg);
180197
if(h != null) {
@@ -232,10 +249,75 @@ public void disconnectPort(String name) {
232249
}
233250
}
234251

235-
public void sendSerialMessage(String msg) {
252+
public void sendCreeperMessage(int dist) {
253+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
254+
255+
stream.write((byte)4);
256+
stream.write((byte)dist);
257+
258+
sendSerialMessage(stream.toByteArray());
259+
}
260+
261+
public void sendHealthMessage(int health) {
262+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
263+
264+
stream.write((byte)1);
265+
stream.write((byte)health);
266+
267+
sendSerialMessage(stream.toByteArray());
268+
}
269+
270+
public void sendFoodLevelMessage(int foodLevel) {
271+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
272+
273+
stream.write((byte)2);
274+
stream.write((byte)foodLevel);
275+
276+
sendSerialMessage(stream.toByteArray());
277+
}
278+
279+
280+
public void sendAirMessage(int air) {
281+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
282+
283+
stream.write((byte)3);
284+
stream.write((byte)(air >> 8));
285+
stream.write((byte)air);
286+
287+
sendSerialMessage(stream.toByteArray());
288+
}
289+
290+
public void sendRedstoneMessage(int redstoneSignal, String id) {
291+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
292+
293+
stream.write((byte)0); // redstone message type
294+
stream.write((byte)redstoneSignal); // strength of the redstone signal 0-15
295+
296+
try {
297+
byte[] bytes = id.getBytes("UTF-8");
298+
stream.write(bytes, 0, bytes.length);
299+
} catch (UnsupportedEncodingException e) {
300+
// TODO Auto-generated catch block
301+
e.printStackTrace();
302+
}
303+
304+
sendSerialMessage(stream.toByteArray());
305+
}
306+
307+
public void sendSerialMessage(byte[] msg) {
308+
ByteArrayOutputStream stream = new ByteArrayOutputStream();
309+
310+
stream.write((byte)1);
311+
stream.write((byte)'S');
312+
stream.write((byte)'C');
313+
stream.write((byte)msg.length);
314+
stream.write(msg, 0, msg.length);
315+
316+
byte[] scMsg = stream.toByteArray();
317+
//System.out.println(scMsg);
236318
try {
237319
for(Map.Entry<String, SerialPortIO> entry : ports.entrySet()) {
238-
entry.getValue().sendMessage(msg);
320+
entry.getValue().sendMessage(scMsg);
239321
}
240322
} catch(SerialPortException ex) {
241323
System.out.println(ex);

src/main/java/org/cmbozeman/forge/mods/serialcraft/SerialPortIO.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ public SerialPortIO(String portName, int b) throws SerialPortException {
2828
//System.out.println("Successfully connected to serial port");
2929
}
3030

31+
public void sendMessage(byte[] bytes) throws SerialPortException {
32+
serialPort.writeBytes(bytes);
33+
}
34+
3135
public void sendMessage(String str) throws SerialPortException {
3236
serialPort.writeString(str);
3337
}

src/main/java/org/cmbozeman/forge/mods/serialcraft/SerialRedstoneIDMessage.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,14 @@ public IMessage onMessage(SerialRedstoneIDMessage message, MessageContext ctx) {
7272
sr.setID(message.getID());
7373
world.markBlockForUpdate(message.getX(), message.getY(), message.getZ());
7474
}
75+
} else if(te instanceof TileEntitySendSerialMessage) {
76+
TileEntitySendSerialMessage sm = (TileEntitySendSerialMessage)te;
77+
if(sm.getSerialMessage().equals("message")) {
78+
sm.setSerialMessage(message.getID());
79+
world.markBlockForUpdate(message.getX(), message.getY(), message.getZ());
80+
}
7581
}
82+
7683
return null; // no response in this case
7784
}
7885

src/main/java/org/cmbozeman/forge/mods/serialcraft/TileEntitySendSerialMessage.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
5757
@Override
5858
public boolean receiveClientEvent(int action, int param) {
5959
if(this.worldObj.isRemote) {
60-
//System.out.println("client received " + action + " " + param);
60+
System.out.println("client received " + action + " " + param + " " + serialMessage);
61+
6162
// TODO make minecraft forge event that is posted to the event bus
6263
if(ClientProxy.getSerialCraftListener() != null) {
63-
ClientProxy.getSerialCraftListener().sendSerialMessage(" " + param + " ");
64+
ClientProxy.getSerialCraftListener().sendRedstoneMessage(param, serialMessage);
6465
} else {
6566
// System.out.println("serialCraftListener not initialized correctly");
6667
}

0 commit comments

Comments
 (0)