Skip to content

Commit

Permalink
Several improvements
Browse files Browse the repository at this point in the history
* Fixed crappy key handler -
  * Key can now be bound to something other than C
  * Configured keyboard key will save and work on reload
  * Less complex naming and handler to ease adding new keys
* Fixed Chisel blocks not being able to be placed on cables
* Fixed language handler crashing game
  • Loading branch information
jrddunbr committed Mar 29, 2024
1 parent e148f76 commit 9b72d3f
Show file tree
Hide file tree
Showing 11 changed files with 96 additions and 183 deletions.
5 changes: 0 additions & 5 deletions src/main/java/mods/eln/Eln.java
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@ public class Eln {
public static SaveConfig saveConfig;
public static GhostManager ghostManager;
public static GhostManagerNbt ghostManagerNbt;
public static PlayerManager playerManager;
public static ModbusTcpServer modbusServer;
public static NodeManagerNbt nodeManagerNbt;
public static Simulator simulator = null;
Expand Down Expand Up @@ -369,8 +368,6 @@ public void preInit(FMLPreInitializationEvent event) {
ghostManager = new GhostManager("caca2");
delayedTask = new DelayedTaskManager();

playerManager = new PlayerManager();

oreRegenerate = new OreRegenerate();
nodeServer = new NodeServer();
clientLiveDataManager = new LiveDataManager();
Expand Down Expand Up @@ -485,7 +482,6 @@ public void onServerStopped(FMLServerStoppedEvent ev) {
NodeBlockEntity.clientList.clear();
TeleporterElement.teleporterList.clear();
IWirelessSignalSpot.spots.clear();
playerManager.clear();
clientLiveDataManager.stop();
nodeManager.clear();
ghostManager.clear();
Expand All @@ -509,7 +505,6 @@ public void onServerStart(FMLServerAboutToStartEvent ev) {
LightBlockEntity.observers.clear();
WirelessSignalTxElement.channelMap.clear();
LampSupplyElement.channelMap.clear();
playerManager.clear();
clientLiveDataManager.start();
simulator.init();
simulator.addSlowProcess(wind = new WindProcess());
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/mods/eln/i18n/I18N.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.registry.LanguageRegistry;
import mods.eln.misc.Utils;

/**
* Internationalization and localization helper class.
Expand Down Expand Up @@ -50,7 +51,12 @@ static String encodeLangKey(String key, boolean replaceWhitspaces) {
*/
public static String tr(final String text, Object... objects) {
// Try to find the translation for the string using forge API.
String translation = languageRegistry.getStringLocalization(encodeLangKey(text));
String translation = null;
try {
translation = languageRegistry.getStringLocalization(encodeLangKey(text));
} catch (NullPointerException ignored) {
Utils.println("Unable to translate string: " + text);
}

// If no translation was found, just use the original text.
if (translation == null || "".equals(translation)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class ElectricalLoadHeatThermalLoad(var resistor: ElectricalLoad, var load: Ther
override fun process(time: Double) {
if (resistor.isNotSimulated) return
val current = resistor.current
println("Moving heat: ${current * current * resistor.serialResistance * 2} watts at $resistor $load")
// println("Moving heat: ${current * current * resistor.serialResistance * 2} watts at $resistor $load")
load.movePowerTo(current * current * resistor.serialResistance * 2)
}
}
21 changes: 8 additions & 13 deletions src/main/kotlin/mods/eln/PacketHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class PacketHandler {
}
}

fun packetPlaySound(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
private fun packetPlaySound(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
try {
if (stream.readByte().toInt() != player.dimension) return
SoundClient.play(SoundCommand.fromStream(stream, player.worldObj))
Expand All @@ -92,7 +92,7 @@ class PacketHandler {
}
}

fun packetOpenLocalGui(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
private fun packetOpenLocalGui(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
try {
player.openGui(Eln.instance, stream.readInt(),
player.worldObj, stream.readInt(), stream.readInt(),
Expand All @@ -102,7 +102,7 @@ class PacketHandler {
}
}

fun packetForNode(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer?) {
private fun packetForNode(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer?) {
try {
val coordinate = Coordinate(stream.readInt(), stream.readInt(), stream.readInt(), stream.readByte().toInt())
val node = NodeManager.instance!!.getNodeFromCoordonate(coordinate)
Expand All @@ -116,7 +116,7 @@ class PacketHandler {
}
}

fun packetForClientNode(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
private fun packetForClientNode(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
try {
val x = stream.readInt()
val y = stream.readInt()
Expand Down Expand Up @@ -145,7 +145,7 @@ class PacketHandler {
}
}

fun packetNodeSingleSerialized(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
private fun packetNodeSingleSerialized(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer) {
try {
val x: Int = stream.readInt()
val y: Int = stream.readInt()
Expand Down Expand Up @@ -174,16 +174,11 @@ class PacketHandler {
}
}

fun packetPlayerKey(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer?) {
val playerMP = player as EntityPlayerMP?
val id: Byte
private fun packetPlayerKey(stream: DataInputStream, @Suppress("UNUSED_PARAMETER") manager: NetworkManager, player: EntityPlayer?) {
try {
id = stream.readByte()
val name = stream.readUTF()
val state = stream.readBoolean()
if (id.toInt() == ClientKeyHandler.wrenchId) {
val metadata = Eln.playerManager[playerMP!!]
metadata!!.interactEnable = state
}
ServerKeyHandler.set(name, state)
} catch (e: IOException) {
e.printStackTrace()
}
Expand Down
17 changes: 17 additions & 0 deletions src/main/kotlin/mods/eln/ServerKeyHandler.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package mods.eln

data class KeyState(val name: String, var state: Boolean = false)

object ServerKeyHandler {
val WRENCH = "Wrench"
val WIKI = "Wiki"
private val keyState = listOf(KeyState(WRENCH))

fun get(name: String): Boolean {
return keyState.firstOrNull {it.name == name}?.state?: false
}

fun set(name: String, state: Boolean) {
keyState.firstOrNull { it.name == name }?.state = state
}
}
123 changes: 50 additions & 73 deletions src/main/kotlin/mods/eln/client/ClientKeyHandler.kt
Original file line number Diff line number Diff line change
@@ -1,88 +1,65 @@
package mods.eln.client;
package mods.eln.client

import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import mods.eln.Eln;
import mods.eln.misc.UtilsClient;
import mods.eln.wiki.Root;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.util.StatCollector;
import org.lwjgl.input.Keyboard;
import cpw.mods.fml.client.registry.ClientRegistry
import cpw.mods.fml.common.eventhandler.SubscribeEvent
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent
import mods.eln.Eln
import mods.eln.ServerKeyHandler
import mods.eln.i18n.I18N.tr
import mods.eln.misc.Utils
import mods.eln.misc.UtilsClient.clientOpenGui
import mods.eln.misc.UtilsClient.sendPacketToServer
import mods.eln.wiki.Root
import net.minecraft.client.settings.KeyBinding
import net.minecraft.util.StatCollector
import org.lwjgl.input.Keyboard
import java.io.ByteArrayOutputStream
import java.io.DataOutputStream
import java.io.IOException

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
//import mods.eln.wiki.Root;
data class ElectricalAgeKey(var defaultKeybind: Int, val name: String, var lastState: Boolean = false, var binding: KeyBinding? = null)

public class ClientKeyHandler {
class ClientKeyHandler {
// Note: C is the default wrench key, but it can be changed with the GUI in-game. This is override with the value stored in options.txt
private val keyboardKeys = listOf(
ElectricalAgeKey(Keyboard.KEY_C, ServerKeyHandler.WRENCH),
ElectricalAgeKey(Keyboard.KEY_W, ServerKeyHandler.WIKI)
)

static public final int openWikiId = 0;
static public final int wrenchId = 1;
static final String openWiki = "Open Wiki";
static final String wrench = "Wrench";
private static final int[] keyValues = {Keyboard.KEY_X, Keyboard.KEY_C};
private static final String[] desc = {openWiki, wrench};
public static final KeyBinding[] keys = new KeyBinding[desc.length];

boolean[] states = new boolean[desc.length];

Minecraft mc;

public ClientKeyHandler() {
mc = Minecraft.getMinecraft();

for (int i = 0; i < desc.length; ++i) {
if (i != 3)
states[i] = false;
keys[i] = new KeyBinding(desc[i], keyValues[i], StatCollector.translateToLocal("ElectricalAge"));
ClientRegistry.registerKeyBinding(keys[i]);
}
}

@SubscribeEvent
public void onKeyInput(KeyInputEvent event) {
for (int i = 0; i < desc.length; ++i) {
boolean s = keys[i].getIsKeyPressed();
if (s == false) continue;
if (states[i])
setState(i, false);
setState(i, true);
init {
keyboardKeys.forEach {
it.binding = KeyBinding(it.name, it.defaultKeybind, StatCollector.translateToLocal("ElectricalAge"))
ClientRegistry.registerKeyBinding(it.binding)
}
}

@SubscribeEvent
public void tick(ClientTickEvent event) {
if (event.phase != Phase.START) return;
for (int i = 0; i < desc.length; ++i) {
boolean s = keys[i].getIsKeyPressed();
if (s == false && states[i] == true) {
setState(i, false);
}
fun onKeyInput(event: KeyInputEvent?) {
keyboardKeys.forEach {
setState(it.name, it.binding?.isKeyPressed ?: return@forEach)
}
}

void setState(int id, boolean state) {
states[id] = state;

if (id == openWikiId) {
UtilsClient.clientOpenGui(new Root(null));
}
fun setState(name: String, state: Boolean) {
val entry = keyboardKeys.firstOrNull { it.name == name }?: return
if (entry.lastState != state) {
entry.lastState = state // Be sure to set the state so that it calls again when key released

ByteArrayOutputStream bos = new ByteArrayOutputStream(64);
DataOutputStream stream = new DataOutputStream(bos);
if (entry.name == ServerKeyHandler.WIKI) {
clientOpenGui(Root(null))
}

try {
stream.writeByte(Eln.packetPlayerKey);
stream.writeByte(id);
stream.writeBoolean(state);
} catch (IOException e) {
e.printStackTrace();
Utils.println("Sending a client key event to server: ${entry.name} is $state")
val bos = ByteArrayOutputStream(64)
val stream = DataOutputStream(bos)
try {
stream.writeByte(Eln.packetPlayerKey.toInt())
stream.writeUTF(entry.name)
stream.writeBoolean(state)
} catch (e: IOException) {
e.printStackTrace()
}
sendPacketToServer(bos)
}

UtilsClient.sendPacketToServer(bos);
}
}
}
3 changes: 2 additions & 1 deletion src/main/kotlin/mods/eln/misc/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import org.lwjgl.opengl.GL11
import net.minecraft.world.World
import cpw.mods.fml.common.FMLCommonHandler
import cpw.mods.fml.relauncher.Side
import mods.eln.ServerKeyHandler
import net.minecraftforge.common.DimensionManager
import net.minecraft.entity.item.EntityItem
import java.io.IOException
Expand Down Expand Up @@ -1236,7 +1237,7 @@ object Utils {
@JvmStatic
fun isPlayerUsingWrench(player: EntityPlayer?): Boolean {
if (player == null) return false
if (Eln.playerManager[player]!!.interactEnable) return true
if (ServerKeyHandler.get(ServerKeyHandler.WRENCH)) return true
val stack = player.inventory.getCurrentItem() ?: return false
return isWrench(stack)
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/mods/eln/node/NodeBase.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import java.io.IOException
import kotlin.jvm.JvmOverloads
import net.minecraft.server.MinecraftServer
import cpw.mods.fml.common.FMLCommonHandler
import mods.eln.ServerKeyHandler
import net.minecraft.world.WorldServer
import net.minecraft.entity.item.EntityItem
import net.minecraft.inventory.IInventory
Expand Down Expand Up @@ -173,7 +174,7 @@ abstract class NodeBase {
}
val act: String
var snd = beepError
if (entityPlayer.isSneaking || Eln.playerManager[entityPlayer]!!.interactEnable) {
if (entityPlayer.isSneaking && ServerKeyHandler.get(ServerKeyHandler.WRENCH)) {
if (writeConfigTool(side, equipped.tagCompound, entityPlayer)) snd = beepDownloaded
act = "write"
} else {
Expand Down
10 changes: 5 additions & 5 deletions src/main/kotlin/mods/eln/node/six/SixNode.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mods.eln.node.six

import mods.eln.Eln
import mods.eln.ServerKeyHandler
import mods.eln.item.IConfigurable
import mods.eln.misc.Direction
import mods.eln.misc.Direction.Companion.fromInt
Expand Down Expand Up @@ -412,20 +413,19 @@ class SixNode : Node() {
val stack = entityPlayer.currentEquippedItem
var b = Blocks.air
if (stack != null) b = Block.getBlockFromItem(stack.item)
var accepted = false
if (Eln.playerManager[entityPlayer]!!.interactEnable && stack != null) {
var isWrenchReplacingBlock = false
if (ServerKeyHandler.get(ServerKeyHandler.WRENCH) && stack != null) {
for (a in sixNodeCacheList) {
if (a.accept(stack)) {
accepted = true
isWrenchReplacingBlock = true
sixNodeCacheBlock = b
sixNodeCacheBlockMeta = a.getMeta(stack).toByte()
break
}
}
}

if (accepted) {
println("ACACAC")
if (isWrenchReplacingBlock) {
needPublish = true
if (!isCreative((entityPlayer as EntityPlayerMP))) entityPlayer.inventory.decrStackSize(entityPlayer.inventory.currentItem, 1)

Expand Down
4 changes: 4 additions & 0 deletions src/main/kotlin/mods/eln/node/six/SixNodeCacheStd.kt
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
package mods.eln.node.six

import mods.eln.misc.Utils
import mods.eln.node.ISixNodeCache
import net.minecraft.block.Block
import net.minecraft.block.BlockContainer
import net.minecraft.item.ItemStack

class SixNodeCacheStd : ISixNodeCache {
override fun accept(stack: ItemStack): Boolean {
Utils.println("Testing item ${stack.displayName} for blockiness")
val b = Block.getBlockFromItem(stack.item) ?: return false
if (b is BlockContainer) return false
Utils.println("Item is probably a block with render type ${b.renderType}")
return if (stack.item is SixNodeItem) false else when (b.renderType) {
0 -> true
31 -> true // Logs
39 -> true // Quartz block
59 -> true // Chisel?
else -> false
}
}
Expand Down
Loading

0 comments on commit 9b72d3f

Please sign in to comment.