Skip to content

Commit 932f28f

Browse files
committedJan 16, 2016
Added Serial Flamingo Interface.
1 parent 7dc05e8 commit 932f28f

File tree

9 files changed

+164
-8
lines changed

9 files changed

+164
-8
lines changed
 

Diff for: ‎src/main/java/pl/asie/computronics/integration/flamingo/DriverFlamingo.java

+51
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
import li.cil.oc.api.machine.Context;
1010
import li.cil.oc.api.network.ManagedEnvironment;
1111
import li.cil.oc.api.prefab.DriverTileEntity;
12+
import li.cil.tis3d.api.serial.SerialInterface;
1213
import net.minecraft.tileentity.TileEntity;
14+
import net.minecraft.util.EnumFacing;
15+
import net.minecraft.util.MathHelper;
1316
import net.minecraft.world.World;
1417
import pl.asie.computronics.integration.CCMultiPeripheral;
1518
import pl.asie.computronics.integration.ManagedEnvironmentOCTile;
19+
import pl.asie.computronics.integration.tis3d.serial.TileInterfaceProvider;
20+
import pl.asie.computronics.integration.tis3d.serial.TileSerialInterface;
1621
import pl.asie.computronics.reference.Names;
1722

1823
/**
@@ -97,4 +102,50 @@ public Object[] callMethod(IComputerAccess computer, ILuaContext context, int me
97102
return null;
98103
}
99104
}
105+
106+
public static class TISInterfaceProvider extends TileInterfaceProvider {
107+
108+
public TISInterfaceProvider() {
109+
super(TileEntityFlamingo.class, "flamingo", "protocols/computronics/flamingo.md");
110+
}
111+
112+
public static class InternalSerialInterface extends TileSerialInterface<TileEntityFlamingo> {
113+
114+
public InternalSerialInterface(TileEntityFlamingo tile) {
115+
super(tile);
116+
}
117+
118+
@Override
119+
public boolean canWrite() {
120+
return true;
121+
}
122+
123+
@Override
124+
public void write(short value) {
125+
tile.getWorldObj().addBlockEvent(tile.xCoord, tile.yCoord, tile.zCoord, tile.getBlockType(), 0, 0);
126+
}
127+
128+
@Override
129+
public boolean canRead() {
130+
return true;
131+
}
132+
133+
@Override
134+
public short peek() {
135+
return (short) MathHelper.floor_float(tile.wiggleStrength);
136+
}
137+
}
138+
139+
@Override
140+
public SerialInterface interfaceFor(World world, int x, int y, int z, EnumFacing side) {
141+
return new InternalSerialInterface((TileEntityFlamingo) world.getTileEntity(x, y, z));
142+
}
143+
144+
@Override
145+
protected boolean isStillValid(World world, int x, int y, int z, EnumFacing side, SerialInterface serialInterface, TileEntity tile) {
146+
return tile instanceof TileEntityFlamingo
147+
&& serialInterface instanceof InternalSerialInterface
148+
&& ((InternalSerialInterface) serialInterface).isTileEqual(tile);
149+
}
150+
}
100151
}

Diff for: ‎src/main/java/pl/asie/computronics/integration/tis3d/IntegrationTIS3D.java

+6
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import cpw.mods.fml.common.Optional;
55
import cpw.mods.fml.common.registry.GameRegistry;
66
import li.cil.tis3d.api.ModuleAPI;
7+
import li.cil.tis3d.api.SerialAPI;
78
import net.minecraft.init.Blocks;
89
import net.minecraft.item.ItemStack;
910
import net.minecraftforge.client.MinecraftForgeClient;
1011
import pl.asie.computronics.Computronics;
12+
import pl.asie.computronics.integration.flamingo.DriverFlamingo;
1113
import pl.asie.computronics.integration.tis3d.item.ItemModules;
1214
import pl.asie.computronics.integration.tis3d.manual.ComputronicsPathProvider;
1315
import pl.asie.computronics.integration.tis3d.module.ComputronicsModuleRenderer;
@@ -46,6 +48,10 @@ public void preInit() {
4648
public void init() {
4749
ComputronicsPathProvider.initialize();
4850
ModuleAPI.addProvider(itemModules);
51+
52+
if(Mods.isLoaded(Mods.Flamingo)) {
53+
SerialAPI.addProvider(new DriverFlamingo.TISInterfaceProvider());
54+
}
4955
}
5056

5157
@Optional.Method(modid = Mods.TIS3D)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package pl.asie.computronics.integration.tis3d.serial;
2+
3+
import li.cil.tis3d.api.serial.SerialInterface;
4+
import li.cil.tis3d.api.serial.SerialInterfaceProvider;
5+
import li.cil.tis3d.api.serial.SerialProtocolDocumentationReference;
6+
import net.minecraft.tileentity.TileEntity;
7+
import net.minecraft.util.EnumFacing;
8+
import net.minecraft.world.World;
9+
10+
/**
11+
* @author Sangar, Vexatos
12+
*/
13+
public abstract class TileInterfaceProvider implements SerialInterfaceProvider {
14+
15+
protected final Class<?> tileClass;
16+
protected final String name, link;
17+
18+
public TileInterfaceProvider(Class<?> tileClass, String name, String link) {
19+
this.tileClass = tileClass;
20+
this.name = name;
21+
this.link = link;
22+
}
23+
24+
@Override
25+
public boolean worksWith(World world, int x, int y, int z, EnumFacing side) {
26+
if(tileClass == null) {
27+
// This can happen if filter classes are deduced by reflection and
28+
// the class in question is not present.
29+
return false;
30+
}
31+
final TileEntity tileEntity = world.getTileEntity(x, y, z);
32+
return tileEntity != null && tileClass.isAssignableFrom(tileEntity.getClass());
33+
}
34+
35+
@Override
36+
public SerialProtocolDocumentationReference getDocumentationReference() {
37+
return new SerialProtocolDocumentationReference(name, link);
38+
}
39+
40+
protected abstract boolean isStillValid(World world, int x, int y, int z, EnumFacing side, SerialInterface serialInterface, TileEntity tile);
41+
42+
@Override
43+
public boolean isValid(World world, int x, int y, int z, EnumFacing side, SerialInterface serialInterface) {
44+
if(tileClass == null) {
45+
// This can happen if filter classes are deduced by reflection and
46+
// the class in question is not present.
47+
return false;
48+
}
49+
final TileEntity tile = world.getTileEntity(x, y, z);
50+
return tile != null && isStillValid(world, x, y, z, side, serialInterface, tile);
51+
}
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package pl.asie.computronics.integration.tis3d.serial;
2+
3+
import li.cil.tis3d.api.serial.SerialInterface;
4+
import net.minecraft.nbt.NBTTagCompound;
5+
import net.minecraft.tileentity.TileEntity;
6+
7+
/**
8+
* @author Vexatos
9+
*/
10+
public abstract class TileSerialInterface<T extends TileEntity> implements SerialInterface {
11+
12+
protected final T tile;
13+
14+
public TileSerialInterface(final T tile) {
15+
this.tile = tile;
16+
}
17+
18+
@Override
19+
public void writeToNBT(NBTTagCompound nbt) {
20+
}
21+
22+
@Override
23+
public void readFromNBT(NBTTagCompound nbt) {
24+
}
25+
26+
@Override
27+
public void skip() {
28+
29+
}
30+
31+
@Override
32+
public void reset() {
33+
}
34+
35+
public boolean isTileEqual(TileEntity tile) {
36+
return tile != null && this.tile != null && this.tile.equals(tile);
37+
}
38+
}

Diff for: ‎src/main/java/pl/asie/computronics/oc/manual/ComputronicsPathProvider.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public static void initialize() {
2525
Manual.addProvider(new ComputronicsPathProvider());
2626
Manual.addProvider(new ResourceContentProvider("computronics", "doc/opencomputers/"));
2727
Manual.addTab(findTabIconRenderer(),
28-
"tooltip.computronics.manual.tab.blocks", "computronics/%LANGUAGE%/block/index.md");
28+
"tooltip.computronics.manual.oc.tab.blocks", "computronics/%LANGUAGE%/block/index.md");
2929
Manual.addTab(new TextureTabIconRenderer(new ResourceLocation("computronics", "textures/items/tape_steel.png")),
30-
"tooltip.computronics.manual.tab.items", "computronics/%LANGUAGE%/item/index.md");
30+
"tooltip.computronics.manual.oc.tab.items", "computronics/%LANGUAGE%/item/index.md");
3131
}
3232

3333
private static TabIconRenderer findTabIconRenderer() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Pink Flamingo
2+
3+
![Yep, it's real.](block:flamingo:flamingo.flamingo)
4+
5+
Exploiting the undocumented ability to poke things of the serial port module, it is possible to make Flamingos wiggle. Writing any value to the serial port will result in the module making the Flamingo wiggle, as if a human had poked it. Reading from the module will result in it returning the wiggle strength, but the module is unable to handle particularly high values, resulting undefined behavior for those.

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ tooltip.computronics.waila.lamp.red=Rot: %s
6666
tooltip.computronics.waila.lamp.green=Grün: %s
6767
tooltip.computronics.waila.lamp.blue=Blau: %s
6868

69-
tooltip.computronics.manual.tab.blocks=Computronics: Blöcke
70-
tooltip.computronics.manual.tab.items=Computronics: Items
69+
tooltip.computronics.manual.oc.tab.blocks=Computronics: Blöcke
70+
tooltip.computronics.manual.oc.tab.items=Computronics: Items
71+
72+
tooltip.computronics.manual.tis3d.port.flamingo=Pinker Flamingo
7173

7274
option.computronics.enableOCAddress=Komponentenaddresse
7375
option.computronics.enableTape=Enthaltene Kassette

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ tooltip.computronics.waila.lamp.red=Red: %s
6666
tooltip.computronics.waila.lamp.green=Green: %s
6767
tooltip.computronics.waila.lamp.blue=Blue: %s
6868

69-
tooltip.computronics.manual.tab.blocks=Computronics: Blocks
70-
tooltip.computronics.manual.tab.items=Computronics: Items
69+
tooltip.computronics.manual.oc.tab.blocks=Computronics: Blocks
70+
tooltip.computronics.manual.oc.tab.items=Computronics: Items
71+
72+
tooltip.computronics.manual.tis3d.port.flamingo=Pink Flamingo
7173

7274
option.computronics.enableOCAddress=Component address
7375
option.computronics.enableTape=Inserted tape

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ tooltip.computronics.waila.lamp.red=Красный: %s
6464
tooltip.computronics.waila.lamp.green=Зелёный: %s
6565
tooltip.computronics.waila.lamp.blue=Синий: %s
6666

67-
tooltip.computronics.manual.tab.blocks=Computronics: Блоки
68-
tooltip.computronics.manual.tab.items=Computronics: Предметы
67+
tooltip.computronics.manual.oc.tab.blocks=Computronics: Блоки
68+
tooltip.computronics.manual.oc.tab.items=Computronics: Предметы
6969

7070
option.computronics.enableOCAddress=Адрес компонента
7171
option.computronics.enableTape=Вставленная лента

0 commit comments

Comments
 (0)
Please sign in to comment.