Netsplitter it is. Also added a recipe for it and added sound when toggling states.

This commit is contained in:
Florian Nücke 2015-07-11 18:04:21 +02:00
parent 74763fa141
commit 9540cb44fb
22 changed files with 67 additions and 57 deletions

Binary file not shown.

View File

@ -38,7 +38,7 @@ Keep in mind that some of these may not be available, depending on the recipe se
## Networking ## Networking
* [Access Point](accessPoint.md) * [Access Point](accessPoint.md)
* [Cable](cable.md) * [Cable](cable.md)
* [Net Splitter](toggleThinger.md) * [Net Splitter](netSplitter.md)
* [Switch](switch.md) * [Switch](switch.md)
## Power management ## Power management

View File

@ -1,6 +1,6 @@
# Net Splitter # Net Splitter
![*.net *.split](oredict:oc:toggleThinger) ![*.net *.split](oredict:oc:netSplitter)
The net splitter is a device that allows controlling connectivity between subnetworks. Unlike the [switch](switch.md) or [power converter](powerConverter.md) it directly connects adjacent subnetworks, i.e. components can be accessed. Each side's connectivity can be toggled using a wrench (e.g. the [scrench](../item/wrench.md)). When a redstone signal is applied to the net splitter, all sides' connectivity is inverted. The net splitter is a device that allows controlling connectivity between subnetworks. Unlike the [switch](switch.md) or [power converter](powerConverter.md) it directly connects adjacent subnetworks, i.e. components can be accessed. Each side's connectivity can be toggled using a wrench (e.g. the [scrench](../item/wrench.md)). When a redstone signal is applied to the net splitter, all sides' connectivity is inverted.

View File

@ -36,7 +36,7 @@ tile.oc.screen2.name=Screen (Tier 2)
tile.oc.screen3.name=Screen (Tier 3) tile.oc.screen3.name=Screen (Tier 3)
tile.oc.serverRack.name=Server Rack tile.oc.serverRack.name=Server Rack
tile.oc.switch.name=Switch tile.oc.switch.name=Switch
tile.oc.toggleThinger.name=Net Splitter tile.oc.netSplitter.name=Net Splitter
tile.oc.waypoint.name=Waypoint tile.oc.waypoint.name=Waypoint
# Items # Items
@ -332,7 +332,7 @@ oc:tooltip.TabletCase=Basic case for tablets. Place it into the assembler to add
oc:tooltip.Terminal=Allows controlling a server remotely, as long as you are in range of it. Acts like a portable screen and keyboard. Shift-right-click a server in a server rack to bind the terminal to it. oc:tooltip.Terminal=Allows controlling a server remotely, as long as you are in range of it. Acts like a portable screen and keyboard. Shift-right-click a server in a server rack to bind the terminal to it.
oc:tooltip.TexturePicker=This tool allows showing a string describing a block's surface, for use in 3D printer shape definitions. Totally not texture names, nope. No sir. oc:tooltip.TexturePicker=This tool allows showing a string describing a block's surface, for use in 3D printer shape definitions. Totally not texture names, nope. No sir.
oc:tooltip.Tier=§8Tier %s oc:tooltip.Tier=§8Tier %s
oc:tooltip.ToggleThinger=Acts as a dynamic connector. Connectivity of each side can be toggled by hitting it with a wrench. Connectivity of all sides can be inverted by applying a redstone signal. oc:tooltip.NetSplitter=Acts as a dynamic connector. Connectivity of each side can be toggled by hitting it with a wrench. Connectivity of all sides can be inverted by applying a redstone signal.
oc:tooltip.TooLong=Hold [§f%s§7] for a detailed tooltip. oc:tooltip.TooLong=Hold [§f%s§7] for a detailed tooltip.
oc:tooltip.Transistor=A basic element in most other computer parts. It's a bit twisted, but it does the job. oc:tooltip.Transistor=A basic element in most other computer parts. It's a bit twisted, but it does the job.
oc:tooltip.UpgradeAngel=Allows robots to place blocks in thin air, even if there is no point of reference. oc:tooltip.UpgradeAngel=Allows robots to place blocks in thin air, even if there is no point of reference.

View File

@ -576,6 +576,11 @@ motionSensor {
[daylightDetector, "oc:cpu2", daylightDetector] [daylightDetector, "oc:cpu2", daylightDetector]
[ingotGold, "oc:materialCircuitBoardPrinted", ingotGold]] [ingotGold, "oc:materialCircuitBoardPrinted", ingotGold]]
} }
netSplitter {
input: [[ingotIron, "oc:cable", ingotIron]
["oc:cable", craftingPiston, "oc:cable"]
[ingotIron, "oc:materialCircuitBoardPrinted", ingotIron]]
}
printer { printer {
input: [[ingotIron, hopper, ingotIron] input: [[ingotIron, hopper, ingotIron]
[craftingPiston, "oc:circuitChip3", craftingPiston] [craftingPiston, "oc:circuitChip3", craftingPiston]

View File

@ -38,7 +38,7 @@ object Constants {
final val ScreenTier3 = "screen3" final val ScreenTier3 = "screen3"
final val ServerRack = "serverRack" final val ServerRack = "serverRack"
final val Switch = "switch" final val Switch = "switch"
final val ToggleThinger = "toggleThinger" final val NetSplitter = "netSplitter"
final val Waypoint = "waypoint" final val Waypoint = "waypoint"
def Case(tier: Int) = ItemUtils.caseNameWithTierSuffix("case", tier) def Case(tier: Int) = ItemUtils.caseNameWithTierSuffix("case", tier)

View File

@ -56,6 +56,7 @@ object PacketHandler extends CommonPacketHandler {
case PacketType.HologramTranslation => onHologramPositionOffsetY(p) case PacketType.HologramTranslation => onHologramPositionOffsetY(p)
case PacketType.HologramValues => onHologramValues(p) case PacketType.HologramValues => onHologramValues(p)
case PacketType.LootDisk => onLootDisk(p) case PacketType.LootDisk => onLootDisk(p)
case PacketType.NetSplitterState => onNetSplitterState(p)
case PacketType.ParticleEffect => onParticleEffect(p) case PacketType.ParticleEffect => onParticleEffect(p)
case PacketType.PetVisibility => onPetVisibility(p) case PacketType.PetVisibility => onPetVisibility(p)
case PacketType.PowerState => onPowerState(p) case PacketType.PowerState => onPowerState(p)
@ -74,7 +75,6 @@ object PacketHandler extends CommonPacketHandler {
case PacketType.TextBufferInit => onTextBufferInit(p) case PacketType.TextBufferInit => onTextBufferInit(p)
case PacketType.TextBufferPowerChange => onTextBufferPowerChange(p) case PacketType.TextBufferPowerChange => onTextBufferPowerChange(p)
case PacketType.TextBufferMulti => onTextBufferMulti(p) case PacketType.TextBufferMulti => onTextBufferMulti(p)
case PacketType.ToggleThingerState => onToggleThingerState(p)
case PacketType.ScreenTouchMode => onScreenTouchMode(p) case PacketType.ScreenTouchMode => onScreenTouchMode(p)
case PacketType.ServerPresence => onServerPresence(p) case PacketType.ServerPresence => onServerPresence(p)
case PacketType.Sound => onSound(p) case PacketType.Sound => onSound(p)
@ -592,8 +592,8 @@ object PacketHandler extends CommonPacketHandler {
buffer.rawSetForeground(col, row, color) buffer.rawSetForeground(col, row, color)
} }
def onToggleThingerState(p: PacketParser) = def onNetSplitterState(p: PacketParser) =
p.readTileEntity[ToggleThinger]() match { p.readTileEntity[NetSplitter]() match {
case Some(t) => case Some(t) =>
t.isInverted = p.readBoolean() t.isInverted = p.readBoolean()
t.openSides = t.uncompressSides(p.readByte()) t.openSides = t.uncompressSides(p.readByte())

View File

@ -69,7 +69,7 @@ private[oc] class Proxy extends CommonProxy {
ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.AccessPoint], SwitchRenderer) ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.AccessPoint], SwitchRenderer)
ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.RobotProxy], RobotRenderer) ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.RobotProxy], RobotRenderer)
ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.Screen], ScreenRenderer) ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.Screen], ScreenRenderer)
ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.ToggleThinger], ToggleThingerRenderer) ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.NetSplitter], NetSplitterRenderer)
MinecraftForgeClient.registerItemRenderer(Items.get(Constants.ItemName.Floppy).createItemStack(1).getItem, ItemRenderer) MinecraftForgeClient.registerItemRenderer(Items.get(Constants.ItemName.Floppy).createItemStack(1).getItem, ItemRenderer)
MinecraftForgeClient.registerItemRenderer(Items.get(Constants.BlockName.Print).createItemStack(1).getItem, ItemRenderer) MinecraftForgeClient.registerItemRenderer(Items.get(Constants.BlockName.Print).createItemStack(1).getItem, ItemRenderer)

View File

@ -97,7 +97,7 @@ object Textures {
var iconSideActivity: IIcon = _ var iconSideActivity: IIcon = _
} }
object ToggleThinger { object NetSplitter {
var iconOn: IIcon = _ var iconOn: IIcon = _
} }

View File

@ -31,7 +31,10 @@ object PetRenderer {
"DaKaTotal" ->(0.5, 0.7, 1.0), "DaKaTotal" ->(0.5, 0.7, 1.0),
"MichiyoRavencroft" ->(1.0, 0.0, 0.0), "MichiyoRavencroft" ->(1.0, 0.0, 0.0),
"Vexatos" ->(0.18, 0.95, 0.922), "Vexatos" ->(0.18, 0.95, 0.922),
"StoneNomad" ->(0.8, 0.77, 0.75) "StoneNomad" ->(0.8, 0.77, 0.75),
"LizzyTheSiren" ->(0.3, 0.3, 1.0),
"vifino" ->(0.2, 1.0, 0.1),
"Izaya" ->(0.0, 0.2, 0.6)
) )
private val petLocations = com.google.common.cache.CacheBuilder.newBuilder(). private val petLocations = com.google.common.cache.CacheBuilder.newBuilder().

View File

@ -25,14 +25,14 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
val renderer = patchedRenderer(realRenderer, block) val renderer = patchedRenderer(realRenderer, block)
GL11.glPushMatrix() GL11.glPushMatrix()
block match { block match {
case assembler: Assembler => case _: Assembler =>
GL11.glTranslatef(-0.5f, -0.5f, -0.5f) GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
Tessellator.instance.startDrawingQuads() Tessellator.instance.startDrawingQuads()
Assembler.render(block, metadata, renderer) Assembler.render(block, metadata, renderer)
Tessellator.instance.draw() Tessellator.instance.draw()
RenderState.checkError(getClass.getName + ".renderInventoryBlock: assembler") RenderState.checkError(getClass.getName + ".renderInventoryBlock: assembler")
case cable: Cable => case _: Cable =>
GL11.glScalef(1.6f, 1.6f, 1.6f) GL11.glScalef(1.6f, 1.6f, 1.6f)
GL11.glTranslatef(-0.5f, -0.5f, -0.5f) GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
Tessellator.instance.startDrawingQuads() Tessellator.instance.startDrawingQuads()
@ -40,33 +40,33 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
Tessellator.instance.draw() Tessellator.instance.draw()
RenderState.checkError(getClass.getName + ".renderInventoryBlock: cable") RenderState.checkError(getClass.getName + ".renderInventoryBlock: cable")
case hologram: Hologram => case _: Hologram =>
GL11.glTranslatef(-0.5f, -0.5f, -0.5f) GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
Tessellator.instance.startDrawingQuads() Tessellator.instance.startDrawingQuads()
Hologram.render(block, metadata, renderer) Hologram.render(block, metadata, renderer)
Tessellator.instance.draw() Tessellator.instance.draw()
RenderState.checkError(getClass.getName + ".renderInventoryBlock: hologram") RenderState.checkError(getClass.getName + ".renderInventoryBlock: hologram")
case printer: Printer => case _: Printer =>
GL11.glTranslatef(-0.5f, -0.5f, -0.5f) GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
Tessellator.instance.startDrawingQuads() Tessellator.instance.startDrawingQuads()
Printer.render(block, metadata, renderer) Printer.render(block, metadata, renderer)
Tessellator.instance.draw() Tessellator.instance.draw()
RenderState.checkError(getClass.getName + ".renderInventoryBlock: printer") RenderState.checkError(getClass.getName + ".renderInventoryBlock: printer")
case proxy@(_: RobotProxy | _: RobotAfterimage) => case _@(_: RobotProxy | _: RobotAfterimage) =>
GL11.glScalef(1.5f, 1.5f, 1.5f) GL11.glScalef(1.5f, 1.5f, 1.5f)
GL11.glTranslatef(-0.5f, -0.4f, -0.5f) GL11.glTranslatef(-0.5f, -0.4f, -0.5f)
RobotRenderer.renderChassis() RobotRenderer.renderChassis()
RenderState.checkError(getClass.getName + ".renderInventoryBlock: robot") RenderState.checkError(getClass.getName + ".renderInventoryBlock: robot")
case toggle: ToggleThinger => case _: NetSplitter =>
GL11.glTranslatef(-0.5f, -0.5f, -0.5f) GL11.glTranslatef(-0.5f, -0.5f, -0.5f)
Tessellator.instance.startDrawingQuads() Tessellator.instance.startDrawingQuads()
ToggleThinger.render(block, metadata, renderer) NetSplitter.render(block, metadata, renderer)
Tessellator.instance.draw() Tessellator.instance.draw()
RenderState.checkError(getClass.getName + ".renderInventoryBlock: toggleThinger") RenderState.checkError(getClass.getName + ".renderInventoryBlock: splitter")
case _ => case _ =>
block match { block match {
case simple: SimpleBlock => case simple: SimpleBlock =>
@ -139,10 +139,10 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
RenderState.checkError(getClass.getName + ".renderWorldBlock: rack") RenderState.checkError(getClass.getName + ".renderWorldBlock: rack")
true true
case toggle: tileentity.ToggleThinger => case splitter: tileentity.NetSplitter =>
ToggleThinger.render(ForgeDirection.VALID_DIRECTIONS.map(toggle.isSideOpen), block, x, y, z, renderer) NetSplitter.render(ForgeDirection.VALID_DIRECTIONS.map(splitter.isSideOpen), block, x, y, z, renderer)
RenderState.checkError(getClass.getName + ".renderWorldBlock: toggleThinger") RenderState.checkError(getClass.getName + ".renderWorldBlock: splitter")
true true
case _ => case _ =>
@ -158,7 +158,7 @@ object BlockRenderer extends ISimpleBlockRenderingHandler {
block.isInstanceOf[Hologram] || block.isInstanceOf[Hologram] ||
block.isInstanceOf[Printer] || block.isInstanceOf[Printer] ||
block.isInstanceOf[Print] || block.isInstanceOf[Print] ||
block.isInstanceOf[ToggleThinger] block.isInstanceOf[NetSplitter]
// The texture flip this works around only seems to occur for blocks with custom block renderers? // The texture flip this works around only seems to occur for blocks with custom block renderers?
def patchedRenderer(renderer: RenderBlocks, block: Block) = def patchedRenderer(renderer: RenderBlocks, block: Block) =

View File

@ -4,7 +4,7 @@ import net.minecraft.block.Block
import net.minecraft.client.renderer.RenderBlocks import net.minecraft.client.renderer.RenderBlocks
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
object ToggleThinger { object NetSplitter {
def render(openSides: Array[Boolean], block: Block, x: Int, y: Int, z: Int, renderer: RenderBlocks) { def render(openSides: Array[Boolean], block: Block, x: Int, y: Int, z: Int, renderer: RenderBlocks) {
val previousRenderAllFaces = renderer.renderAllFaces val previousRenderAllFaces = renderer.renderAllFaces
renderer.renderAllFaces = true renderer.renderAllFaces = true

View File

@ -10,12 +10,12 @@ import net.minecraft.tileentity.TileEntity
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
object ToggleThingerRenderer extends TileEntitySpecialRenderer { object NetSplitterRenderer extends TileEntitySpecialRenderer {
override def renderTileEntityAt(tileEntity: TileEntity, x: Double, y: Double, z: Double, f: Float) { override def renderTileEntityAt(tileEntity: TileEntity, x: Double, y: Double, z: Double, f: Float) {
RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)") RenderState.checkError(getClass.getName + ".renderTileEntityAt: entering (aka: wasntme)")
val toggleThinger = tileEntity.asInstanceOf[tileentity.ToggleThinger] val splitter = tileEntity.asInstanceOf[tileentity.NetSplitter]
if (toggleThinger.openSides.contains(!toggleThinger.isInverted)) { if (splitter.openSides.contains(!splitter.isInverted)) {
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS) GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS)
RenderState.disableLighting() RenderState.disableLighting()
@ -31,44 +31,44 @@ object ToggleThingerRenderer extends TileEntitySpecialRenderer {
val t = Tessellator.instance val t = Tessellator.instance
t.startDrawingQuads() t.startDrawingQuads()
val sideActivity = Textures.ToggleThinger.iconOn val sideActivity = Textures.NetSplitter.iconOn
if (toggleThinger.isSideOpen(ForgeDirection.DOWN)) { if (splitter.isSideOpen(ForgeDirection.DOWN)) {
t.addVertexWithUV(0, 1, 0, sideActivity.getMaxU, sideActivity.getMinV) t.addVertexWithUV(0, 1, 0, sideActivity.getMaxU, sideActivity.getMinV)
t.addVertexWithUV(1, 1, 0, sideActivity.getMinU, sideActivity.getMinV) t.addVertexWithUV(1, 1, 0, sideActivity.getMinU, sideActivity.getMinV)
t.addVertexWithUV(1, 1, 1, sideActivity.getMinU, sideActivity.getMaxV) t.addVertexWithUV(1, 1, 1, sideActivity.getMinU, sideActivity.getMaxV)
t.addVertexWithUV(0, 1, 1, sideActivity.getMaxU, sideActivity.getMaxV) t.addVertexWithUV(0, 1, 1, sideActivity.getMaxU, sideActivity.getMaxV)
} }
if (toggleThinger.isSideOpen(ForgeDirection.UP)) { if (splitter.isSideOpen(ForgeDirection.UP)) {
t.addVertexWithUV(0, 0, 0, sideActivity.getMaxU, sideActivity.getMaxV) t.addVertexWithUV(0, 0, 0, sideActivity.getMaxU, sideActivity.getMaxV)
t.addVertexWithUV(0, 0, 1, sideActivity.getMaxU, sideActivity.getMinV) t.addVertexWithUV(0, 0, 1, sideActivity.getMaxU, sideActivity.getMinV)
t.addVertexWithUV(1, 0, 1, sideActivity.getMinU, sideActivity.getMinV) t.addVertexWithUV(1, 0, 1, sideActivity.getMinU, sideActivity.getMinV)
t.addVertexWithUV(1, 0, 0, sideActivity.getMinU, sideActivity.getMaxV) t.addVertexWithUV(1, 0, 0, sideActivity.getMinU, sideActivity.getMaxV)
} }
if (toggleThinger.isSideOpen(ForgeDirection.NORTH)) { if (splitter.isSideOpen(ForgeDirection.NORTH)) {
t.addVertexWithUV(1, 1, 0, sideActivity.getMinU, sideActivity.getMaxV) t.addVertexWithUV(1, 1, 0, sideActivity.getMinU, sideActivity.getMaxV)
t.addVertexWithUV(0, 1, 0, sideActivity.getMaxU, sideActivity.getMaxV) t.addVertexWithUV(0, 1, 0, sideActivity.getMaxU, sideActivity.getMaxV)
t.addVertexWithUV(0, 0, 0, sideActivity.getMaxU, sideActivity.getMinV) t.addVertexWithUV(0, 0, 0, sideActivity.getMaxU, sideActivity.getMinV)
t.addVertexWithUV(1, 0, 0, sideActivity.getMinU, sideActivity.getMinV) t.addVertexWithUV(1, 0, 0, sideActivity.getMinU, sideActivity.getMinV)
} }
if (toggleThinger.isSideOpen(ForgeDirection.SOUTH)) { if (splitter.isSideOpen(ForgeDirection.SOUTH)) {
t.addVertexWithUV(0, 1, 1, sideActivity.getMinU, sideActivity.getMaxV) t.addVertexWithUV(0, 1, 1, sideActivity.getMinU, sideActivity.getMaxV)
t.addVertexWithUV(1, 1, 1, sideActivity.getMaxU, sideActivity.getMaxV) t.addVertexWithUV(1, 1, 1, sideActivity.getMaxU, sideActivity.getMaxV)
t.addVertexWithUV(1, 0, 1, sideActivity.getMaxU, sideActivity.getMinV) t.addVertexWithUV(1, 0, 1, sideActivity.getMaxU, sideActivity.getMinV)
t.addVertexWithUV(0, 0, 1, sideActivity.getMinU, sideActivity.getMinV) t.addVertexWithUV(0, 0, 1, sideActivity.getMinU, sideActivity.getMinV)
} }
if (toggleThinger.isSideOpen(ForgeDirection.WEST)) { if (splitter.isSideOpen(ForgeDirection.WEST)) {
t.addVertexWithUV(0, 1, 0, sideActivity.getMinU, sideActivity.getMaxV) t.addVertexWithUV(0, 1, 0, sideActivity.getMinU, sideActivity.getMaxV)
t.addVertexWithUV(0, 1, 1, sideActivity.getMaxU, sideActivity.getMaxV) t.addVertexWithUV(0, 1, 1, sideActivity.getMaxU, sideActivity.getMaxV)
t.addVertexWithUV(0, 0, 1, sideActivity.getMaxU, sideActivity.getMinV) t.addVertexWithUV(0, 0, 1, sideActivity.getMaxU, sideActivity.getMinV)
t.addVertexWithUV(0, 0, 0, sideActivity.getMinU, sideActivity.getMinV) t.addVertexWithUV(0, 0, 0, sideActivity.getMinU, sideActivity.getMinV)
} }
if (toggleThinger.isSideOpen(ForgeDirection.EAST)) { if (splitter.isSideOpen(ForgeDirection.EAST)) {
t.addVertexWithUV(1, 1, 1, sideActivity.getMinU, sideActivity.getMaxV) t.addVertexWithUV(1, 1, 1, sideActivity.getMinU, sideActivity.getMaxV)
t.addVertexWithUV(1, 1, 0, sideActivity.getMaxU, sideActivity.getMaxV) t.addVertexWithUV(1, 1, 0, sideActivity.getMaxU, sideActivity.getMaxV)
t.addVertexWithUV(1, 0, 0, sideActivity.getMaxU, sideActivity.getMinV) t.addVertexWithUV(1, 0, 0, sideActivity.getMaxU, sideActivity.getMinV)

View File

@ -50,7 +50,7 @@ object PacketType extends Enumeration {
TextBufferMultiRawSetBackground, TextBufferMultiRawSetBackground,
TextBufferMultiRawSetForeground, TextBufferMultiRawSetForeground,
TextBufferPowerChange, TextBufferPowerChange,
ToggleThingerState, NetSplitterState,
ScreenTouchMode, ScreenTouchMode,
ServerPresence, ServerPresence,
Sound, Sound,

View File

@ -119,9 +119,9 @@ class Proxy {
// Example usage: OpenComputers.ID + ":tabletCase" -> "tabletCase1" // Example usage: OpenComputers.ID + ":tabletCase" -> "tabletCase1"
private val itemRenames = Map[String, String]( private val itemRenames = Map[String, String](
OpenComputers.ID + ":microcontrollerCase" -> "microcontrollerCase1", OpenComputers.ID + ":microcontrollerCase" -> Constants.ItemName.MicrocontrollerCaseTier1,
OpenComputers.ID + ":droneCase" -> "droneCase1", OpenComputers.ID + ":droneCase" -> Constants.ItemName.DroneCaseTier1,
OpenComputers.ID + ":tabletCase" -> "tabletCase1" OpenComputers.ID + ":tabletCase" -> Constants.ItemName.TabletCaseTier1
) )
def missingMappings(e: FMLMissingMappingsEvent) { def missingMappings(e: FMLMissingMappingsEvent) {

View File

@ -13,27 +13,27 @@ import net.minecraft.world.IBlockAccess
import net.minecraft.world.World import net.minecraft.world.World
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
class ToggleThinger extends RedstoneAware { class NetSplitter extends RedstoneAware {
override protected def customTextures = Array( override protected def customTextures = Array(
Some("ToggleThingerTop"), Some("NetSplitterTop"),
Some("ToggleThingerTop"), Some("NetSplitterTop"),
Some("ToggleThingerSide"), Some("NetSplitterSide"),
Some("ToggleThingerSide"), Some("NetSplitterSide"),
Some("ToggleThingerSide"), Some("NetSplitterSide"),
Some("ToggleThingerSide") Some("NetSplitterSide")
) )
@SideOnly(Side.CLIENT) override @SideOnly(Side.CLIENT) override
def registerBlockIcons(iconRegister: IIconRegister): Unit = { def registerBlockIcons(iconRegister: IIconRegister): Unit = {
super.registerBlockIcons(iconRegister) super.registerBlockIcons(iconRegister)
Textures.ToggleThinger.iconOn = iconRegister.registerIcon(Settings.resourceDomain + ":ToggleThingerOn") Textures.NetSplitter.iconOn = iconRegister.registerIcon(Settings.resourceDomain + ":NetSplitterOn")
} }
override def isSideSolid(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection): Boolean = false override def isSideSolid(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection): Boolean = false
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
override def createTileEntity(world: World, metadata: Int) = new tileentity.ToggleThinger() override def createTileEntity(world: World, metadata: Int) = new tileentity.NetSplitter()
// ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- //
@ -41,10 +41,10 @@ class ToggleThinger extends RedstoneAware {
if (Wrench.holdsApplicableWrench(player, BlockPosition(x, y, z))) { if (Wrench.holdsApplicableWrench(player, BlockPosition(x, y, z))) {
val sideToToggle = if (player.isSneaking) side.getOpposite else side val sideToToggle = if (player.isSneaking) side.getOpposite else side
world.getTileEntity(x, y, z) match { world.getTileEntity(x, y, z) match {
case toggleThinger: tileentity.ToggleThinger => case splitter: tileentity.NetSplitter =>
if (!world.isRemote) { if (!world.isRemote) {
val oldValue = toggleThinger.openSides(sideToToggle.ordinal()) val oldValue = splitter.openSides(sideToToggle.ordinal())
toggleThinger.setSideOpen(sideToToggle, !oldValue) splitter.setSideOpen(sideToToggle, !oldValue)
} }
true true
case _ => false case _ => false

View File

@ -34,7 +34,7 @@ object Blocks {
GameRegistry.registerTileEntity(classOf[tileentity.Switch], Settings.namespace + "switch") GameRegistry.registerTileEntity(classOf[tileentity.Switch], Settings.namespace + "switch")
GameRegistry.registerTileEntity(classOf[tileentity.Screen], Settings.namespace + "screen") GameRegistry.registerTileEntity(classOf[tileentity.Screen], Settings.namespace + "screen")
GameRegistry.registerTileEntity(classOf[tileentity.ServerRack], Settings.namespace + "serverRack") GameRegistry.registerTileEntity(classOf[tileentity.ServerRack], Settings.namespace + "serverRack")
GameRegistry.registerTileEntity(classOf[tileentity.ToggleThinger], Settings.namespace + "toggleThinger") GameRegistry.registerTileEntity(classOf[tileentity.NetSplitter], Settings.namespace + "netSplitter")
GameRegistry.registerTileEntity(classOf[tileentity.Waypoint], Settings.namespace + "waypoint") GameRegistry.registerTileEntity(classOf[tileentity.Waypoint], Settings.namespace + "waypoint")
Recipes.addBlock(new AccessPoint(), Constants.BlockName.AccessPoint, "oc:accessPoint") Recipes.addBlock(new AccessPoint(), Constants.BlockName.AccessPoint, "oc:accessPoint")
@ -78,6 +78,6 @@ object Blocks {
Recipes.addBlock(new FakeEndstone(), Constants.BlockName.Endstone, "oc:stoneEndstone") Recipes.addBlock(new FakeEndstone(), Constants.BlockName.Endstone, "oc:stoneEndstone")
// v1.5.14 // v1.5.14
Recipes.addBlock(new ToggleThinger(), Constants.BlockName.ToggleThinger, "oc:toggleThinger") Recipes.addBlock(new NetSplitter(), Constants.BlockName.NetSplitter, "oc:netSplitter")
} }
} }

View File

@ -10,7 +10,7 @@ import li.cil.oc.server.{PacketSender => ServerPacketSender}
import net.minecraft.nbt.NBTTagCompound import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.common.util.ForgeDirection import net.minecraftforge.common.util.ForgeDirection
class ToggleThinger extends traits.Environment with traits.RedstoneAware with api.network.SidedEnvironment { class NetSplitter extends traits.Environment with traits.RedstoneAware with api.network.SidedEnvironment {
private final val SideCount = ForgeDirection.VALID_DIRECTIONS.length private final val SideCount = ForgeDirection.VALID_DIRECTIONS.length
val node = api.Network.newNode(this, Visibility.None). val node = api.Network.newNode(this, Visibility.None).
@ -34,7 +34,8 @@ class ToggleThinger extends traits.Environment with traits.RedstoneAware with ap
if (isServer) { if (isServer) {
node.remove() node.remove()
api.Network.joinOrCreateNetwork(this) api.Network.joinOrCreateNetwork(this)
ServerPacketSender.sendToggleThingerState(this) ServerPacketSender.sendNetSplitterState(this)
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "tile.piston.out", 0.5f, world.rand.nextFloat() * 0.25f + 0.7f)
} }
else { else {
world.markBlockForUpdate(x, y, z) world.markBlockForUpdate(x, y, z)
@ -67,7 +68,8 @@ class ToggleThinger extends traits.Environment with traits.RedstoneAware with ap
if (isServer) { if (isServer) {
node.remove() node.remove()
api.Network.joinOrCreateNetwork(this) api.Network.joinOrCreateNetwork(this)
ServerPacketSender.sendToggleThingerState(this) ServerPacketSender.sendNetSplitterState(this)
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "tile.piston.in", 0.5f, world.rand.nextFloat() * 0.25f + 0.7f)
} }
else { else {
world.markBlockForUpdate(x, y, z) world.markBlockForUpdate(x, y, z)

View File

@ -529,8 +529,8 @@ object PacketSender {
pb.sendToPlayersNearHost(host) pb.sendToPlayersNearHost(host)
} }
def sendToggleThingerState(t: tileentity.ToggleThinger): Unit = { def sendNetSplitterState(t: tileentity.NetSplitter): Unit = {
val pb = new SimplePacketBuilder(PacketType.ToggleThingerState) val pb = new SimplePacketBuilder(PacketType.NetSplitterState)
pb.writeTileEntity(t) pb.writeTileEntity(t)
pb.writeBoolean(t.isInverted) pb.writeBoolean(t.isInverted)