Smarter Voltage Observing

- Voltage Observers can now send information through Display Links.
- Added Translation keys for multiple literal strings.
- Fixed StreamCodec issue with flamethrower fuel.
- Added Display Sources for the following:
-> Voltage Generation
-> Voltage
-> Power Generation
-> Power Usage
-> Resistance
-> Current
-> Network Power Generation
-> Network Power Consumption
-> Network Resistance
-> Network ID
This commit is contained in:
PouffyDev
2025-08-01 22:23:30 +01:00
parent 661ac57592
commit 80f59a270c
28 changed files with 857 additions and 140 deletions

View File

@@ -512,6 +512,34 @@
"create.distillation_output.mode.keep_fluid": "ssǝɔoɹԀ uoıʇɐןןıʇsıᗡ doʇS", "create.distillation_output.mode.keep_fluid": "ssǝɔoɹԀ uoıʇɐןןıʇsıᗡ doʇS",
"create.distillation_output.mode.void_when_full": "pınןℲ ssǝɔxƎ pıoΛ", "create.distillation_output.mode.void_when_full": "pınןℲ ssǝɔxƎ pıoΛ",
"create.distillation_output.when_tank_is_full": "ןןnℲ sı ʞuɐ⟘ ןɐuɹǝʇuI uǝɥM", "create.distillation_output.when_tank_is_full": "ןןnℲ sı ʞuɐ⟘ ןɐuɹǝʇuI uǝɥM",
"create.electricity.capacity": "%s :ʎʇıɔɐdɐƆ",
"create.electricity.charging_rate": "%s :ǝʇɐᴚ buıbɹɐɥƆ",
"create.electricity.max_capacity": "%s :ʎʇıɔɐdɐƆ xɐW",
"create.engine.controller.header": "ɹǝןןoɹʇuoƆ ǝuıbuƎ",
"create.engine.efficiency": "%s :ʎɔuǝıɔıɟɟƎ",
"create.engine.fuel_consumption": "%s :uoıʇdɯnsuoƆ ןǝnℲ",
"create.engine.injection_rate": "%s :ǝʇɐᴚ uoıʇɔǝظuI",
"create.engine.length": "%s :ɥʇbuǝꞀ",
"create.engine.rpm": "%s :WԀᴚ",
"create.engine.shift": "%s :ʇɟıɥS",
"create.engine.signal": "%s :ןɐubıS",
"create.engine.speed_efficiency": "%s :ʎɔuǝıɔıɟɟƎ pǝǝdS",
"create.engine.torque": "%s :ǝnbɹo⟘",
"create.engine.type.boxer": "ɹǝxoᗺ",
"create.engine.type.engine_i": "I",
"create.engine.type.engine_u": "∩",
"create.engine.type.engine_v": "Λ",
"create.engine.type.engine_w": "M",
"create.engine.type.radial": "ןɐıpɐᴚ",
"create.engine.type.turbine": "ǝuıqɹn⟘",
"create.engine.upgrade.transmission.neutral": "ןɐɹʇnǝN",
"create.engine.upgrade.transmission.reverse": "ǝsɹǝʌǝᴚ",
"create.engine.upgrade.transmission.shift_1": "ɹɐǝ⅁ ʇsƖ",
"create.engine.upgrade.transmission.shift_2": "ɹɐǝ⅁ puᄅ",
"create.engine.upgrade.transmission.shift_3": "ɹɐǝ⅁ pɹƐ",
"create.engine.upgrade.transmission.shift_4": "ɹɐǝ⅁ ɥʇㄣ",
"create.engine.upgrade.transmission.shift_5": "ɹɐǝ⅁ ɥʇϛ",
"create.engine.upgrade.transmission.shift_6": "ɹɐǝ⅁ ɥʇ9",
"create.fe": "%1$s :ƎℲ", "create.fe": "%1$s :ƎℲ",
"create.flamethrower.fuel.amount": "ʇunoɯⱯ ǝןıʇɔǝظoɹԀ %s", "create.flamethrower.fuel.amount": "ʇunoɯⱯ ǝןıʇɔǝظoɹԀ %s",
"create.flamethrower.fuel.capacity": "%s :ʎʇıɔɐdɐƆ ןǝnℲ", "create.flamethrower.fuel.capacity": "%s :ʎʇıɔɐdɐƆ ןǝnℲ",
@@ -542,17 +570,17 @@
"create.goggles.electric_machine.no_power": "ɹǝʍoԀ oN", "create.goggles.electric_machine.no_power": "ɹǝʍoԀ oN",
"create.goggles.electricity.insufficient_voltage": "ǝbɐʇןoΛ ʇuǝıɔıɟɟnsuI", "create.goggles.electricity.insufficient_voltage": "ǝbɐʇןoΛ ʇuǝıɔıɟɟnsuI",
"create.goggles.electrode_holder.min_amps": " spǝǝN( ʇuǝɹɹnƆ ɥbnouƎ ʇoN", "create.goggles.electrode_holder.min_amps": " spǝǝN( ʇuǝɹɹnƆ ɥbnouƎ ʇoN",
"create.goggles.engine.cooling_fluid": " :pınןℲ buıןooƆ", "create.goggles.engine.cooling_fluid": "%s :pınןℲ buıןooƆ",
"create.goggles.engine.fuel_consumption": ":uoıʇdɯnsuoƆ ןǝnℲ ", "create.goggles.engine.fuel_consumption": "s/ᗺɯ %s :uoıʇdɯnsuoƆ ןǝnℲ",
"create.goggles.engine.header": "oɟuI ǝuıbuƎ", "create.goggles.engine.header": "oɟuI ǝuıbuƎ",
"create.goggles.engine.next_component": " :ʇuǝuodɯoƆ ʇxǝN ", "create.goggles.engine.next_component": " :ʇuǝuodɯoƆ ʇxǝN ",
"create.goggles.engine.oil": " :ןıO", "create.goggles.engine.oil": "%s :ןıO",
"create.goggles.engine.pistons_missing": "buıssıW suoʇsıԀ", "create.goggles.engine.pistons_missing": "buıssıW suoʇsıԀ",
"create.goggles.engine.rpm": " :pǝǝdS ", "create.goggles.engine.rpm": "WԀᴚ %s :pǝǝdS",
"create.goggles.engine.signal": " :ןɐubıS ", "create.goggles.engine.signal": "%s :ןɐubıS",
"create.goggles.engine.torque": ":ǝnbɹo⟘ ", "create.goggles.engine.torque": "%s :ǝnbɹo⟘",
"create.goggles.engine.turbines_missing": "buıssıW sǝuıqɹn⟘", "create.goggles.engine.turbines_missing": "buıssıW sǝuıqɹn⟘",
"create.goggles.engine.type": " :ǝdʎ⟘ ", "create.goggles.engine.type": "%s :ǝdʎ⟘",
"create.goggles.engine.unfinished": "pǝɥsıuıɟu∩ ǝuıbuƎ", "create.goggles.engine.unfinished": "pǝɥsıuıɟu∩ ǝuıbuƎ",
"create.goggles.fluid_storage": ":ǝbɐɹoʇS pınןℲ", "create.goggles.fluid_storage": ":ǝbɐɹoʇS pınןℲ",
"create.goggles.gauge.value": ":ǝbɐʇןoΛ pǝɹnsɐǝW ", "create.goggles.gauge.value": ":ǝbɐʇןoΛ pǝɹnsɐǝW ",
@@ -591,6 +619,15 @@
"create.goggles.vat.tfmg.graphite_electrode": "ǝpoɹʇɔǝןƎ ǝʇıɥdɐɹ⅁ ", "create.goggles.vat.tfmg.graphite_electrode": "ǝpoɹʇɔǝןƎ ǝʇıɥdɐɹ⅁ ",
"create.goggles.vat.tfmg.mixing": "ɹǝxıW ", "create.goggles.vat.tfmg.mixing": "ɹǝxıW ",
"create.goggles.voltmeter": ":ɹǝʇǝɯʇןoΛ", "create.goggles.voltmeter": ":ɹǝʇǝɯʇןoΛ",
"create.goggles.voltmeter.mode.capacity": "ʎʇıɔɐdɐƆ",
"create.goggles.voltmeter.mode.current": "ʇuǝɹɹnƆ",
"create.goggles.voltmeter.mode.fallback": "ʞɔɐqןןɐℲ",
"create.goggles.voltmeter.mode.high_voltage": ")ɥbıH( ǝbɐʇןoΛ",
"create.goggles.voltmeter.mode.net_power_gen": "uoıʇɐɹǝuǝ⅁ ɹǝʍoԀ ʞɹoʍʇǝN",
"create.goggles.voltmeter.mode.net_power_use": "ǝbɐs∩ ɹǝʍoԀ ʞɹoʍʇǝN",
"create.goggles.voltmeter.mode.power": "ɹǝʍoԀ",
"create.goggles.voltmeter.mode.resistance": "ǝɔuɐʇsısǝᴚ",
"create.goggles.voltmeter.mode.voltage": "ǝbɐʇןoΛ",
"create.goggles.voltmeter.range": "%1$s :ǝbuɐᴚ ", "create.goggles.voltmeter.range": "%1$s :ǝbuɐᴚ ",
"create.goggles.winding_machine.header": "ǝuıɥɔɐW buıpuıM", "create.goggles.winding_machine.header": "ǝuıɥɔɐW buıpuıM",
"create.goggles.winding_machine.progress": " :ssǝɹboɹԀ", "create.goggles.winding_machine.progress": " :ssǝɹboɹԀ",
@@ -599,13 +636,17 @@
"create.multimeter.additional_values": ":sǝnןɐΛ ןɐuoıʇıppⱯ", "create.multimeter.additional_values": ":sǝnןɐΛ ןɐuoıʇıppⱯ",
"create.multimeter.energy_stored": " :pǝɹoʇS ʎbɹǝuƎ ", "create.multimeter.energy_stored": " :pǝɹoʇS ʎbɹǝuƎ ",
"create.multimeter.energy_usage": " :ǝbɐs∩ ʎbɹǝuƎ ", "create.multimeter.energy_usage": " :ǝbɐs∩ ʎbɹǝuƎ ",
"create.multimeter.group": " :dnoɹ⅁ ", "create.multimeter.group": "%s :dnoɹ⅁ ",
"create.multimeter.header": ":ɐʇɐᗡ ɹǝʇǝɯıʇןnW", "create.multimeter.header": ":ɐʇɐᗡ ɹǝʇǝɯıʇןnW",
"create.multimeter.power_generated": " :pǝʇɐɹǝuǝ⅁ ɹǝʍoԀ ", "create.multimeter.insufficient_power": "ᴚƎMOԀ ⟘H⅁∩ONƎ ⟘ON",
"create.multimeter.network.consumption": "%s :uoıʇdɯnsuoƆ ɹǝʍoԀ ʞɹoʍʇǝN",
"create.multimeter.network.generation": "%s :uoıʇɐɹǝuǝ⅁ ɹǝʍoԀ ʞɹoʍʇǝN",
"create.multimeter.power_generated": "%s :pǝʇɐɹǝuǝ⅁ ɹǝʍoԀ ",
"create.multimeter.power_percentage": " :ɥʇbuǝɹʇS pıɹ⅁ ", "create.multimeter.power_percentage": " :ɥʇbuǝɹʇS pıɹ⅁ ",
"create.multimeter.power_usage": " :ǝbɐs∩ ɹǝʍoԀ ", "create.multimeter.power_usage": " :ǝbɐs∩ ɹǝʍoԀ ",
"create.multimeter.separator": "----------------------------",
"create.multimeter.transformer_ratio": " :oıʇɐᴚ uɹn⟘ ", "create.multimeter.transformer_ratio": " :oıʇɐᴚ uɹn⟘ ",
"create.multimeter.voltage_generated": " :pǝʇɐɹǝuǝ⅁ ǝbɐʇןoΛ ", "create.multimeter.voltage_generated": "%s :pǝʇɐɹǝuǝ⅁ ǝbɐʇןoΛ ",
"create.network": "%1$s :ʞɹoʍʇǝN", "create.network": "%1$s :ʞɹoʍʇǝN",
"create.oil_hammer.reserves": "%1$s :sǝʌɹǝsǝᴚ ןıO", "create.oil_hammer.reserves": "%1$s :sǝʌɹǝsǝᴚ ןıO",
"create.pumpjack_deposit_amount": "sʇǝʞɔnᗺ %1$s", "create.pumpjack_deposit_amount": "sʇǝʞɔnᗺ %1$s",
@@ -967,6 +1008,16 @@
"item.tfmg.yellow_multimeter.tooltip.summary": "ʞɹoʍʇǝu sʇı puɐ ʞɔoןq ןɐɔıɹʇɔǝןǝ uɐ ʇnoqɐ ɐʇɐp sʍoɥS", "item.tfmg.yellow_multimeter.tooltip.summary": "ʞɹoʍʇǝu sʇı puɐ ʞɔoןq ןɐɔıɹʇɔǝןǝ uɐ ʇnoqɐ ɐʇɐp sʍoɥS",
"item.tfmg.zinc_electrode": "ǝpoɹʇɔǝןƎ ɔuıZ", "item.tfmg.zinc_electrode": "ǝpoɹʇɔǝןƎ ɔuıZ",
"item.tfmg.zinc_grenade": "ǝpɐuǝɹ⅁ ɔuıZ", "item.tfmg.zinc_grenade": "ǝpɐuǝɹ⅁ ɔuıZ",
"tfmg.display_source.electricity.current": "ʇuǝɹɹnƆ",
"tfmg.display_source.electricity.network_consumption": "uoıʇdɯnsuoƆ ɹǝʍoԀ ʞɹoʍʇǝN",
"tfmg.display_source.electricity.network_generation": "uoıʇɐɹǝuǝ⅁ ɹǝʍoԀ ʞɹoʍʇǝN",
"tfmg.display_source.electricity.network_id": "ᗡI ʞɹoʍʇǝN",
"tfmg.display_source.electricity.network_resistance": "ǝɔuɐʇsısǝᴚ ʞɹoʍʇǝN",
"tfmg.display_source.electricity.power_generation": "uoıʇɐɹǝuǝ⅁ ɹǝʍoԀ",
"tfmg.display_source.electricity.power_usage": "ǝbɐs∩ ɹǝʍoԀ",
"tfmg.display_source.electricity.resistance": "ǝɔuɐʇsısǝᴚ",
"tfmg.display_source.electricity.voltage": "ǝbɐʇןoΛ",
"tfmg.display_source.electricity.voltage_generation": "uoıʇɐɹǝuǝ⅁ ǝbɐʇןoΛ",
"tfmg.keyinfo.custom_button": "uoʇʇnᗺ ɯoʇsnƆ ɹǝןןoɹʇuoƆ ǝuıbuƎ", "tfmg.keyinfo.custom_button": "uoʇʇnᗺ ɯoʇsnƆ ɹǝןןoɹʇuoƆ ǝuıbuƎ",
"tfmg.keyinfo.engine_start": "ǝuıbuƎ ʇɹɐʇS", "tfmg.keyinfo.engine_start": "ǝuıbuƎ ʇɹɐʇS",
"tfmg.keyinfo.transmission_shift_down": "uʍoᗡ ʇɟıɥS uoıssıɯsuɐɹ⟘", "tfmg.keyinfo.transmission_shift_down": "uʍoᗡ ʇɟıɥS uoıssıɯsuɐɹ⟘",

View File

@@ -512,6 +512,34 @@
"create.distillation_output.mode.keep_fluid": "Stop Distillation Process", "create.distillation_output.mode.keep_fluid": "Stop Distillation Process",
"create.distillation_output.mode.void_when_full": "Void Excess Fluid", "create.distillation_output.mode.void_when_full": "Void Excess Fluid",
"create.distillation_output.when_tank_is_full": "When Internal Tank is Full", "create.distillation_output.when_tank_is_full": "When Internal Tank is Full",
"create.electricity.capacity": "Capacity: %s",
"create.electricity.charging_rate": "Charging Rate: %s",
"create.electricity.max_capacity": "Max Capacity: %s",
"create.engine.controller.header": "Engine Controller",
"create.engine.efficiency": "Efficiency: %s",
"create.engine.fuel_consumption": "Fuel Consumption: %s",
"create.engine.injection_rate": "Injection Rate: %s",
"create.engine.length": "Length: %s",
"create.engine.rpm": "RPM: %s",
"create.engine.shift": "Shift: %s",
"create.engine.signal": "Signal: %s",
"create.engine.speed_efficiency": "Speed Efficiency: %s",
"create.engine.torque": "Torque: %s",
"create.engine.type.boxer": "Boxer",
"create.engine.type.engine_i": "I",
"create.engine.type.engine_u": "U",
"create.engine.type.engine_v": "V",
"create.engine.type.engine_w": "W",
"create.engine.type.radial": "Radial",
"create.engine.type.turbine": "Turbine",
"create.engine.upgrade.transmission.neutral": "Neutral",
"create.engine.upgrade.transmission.reverse": "Reverse",
"create.engine.upgrade.transmission.shift_1": "1st Gear",
"create.engine.upgrade.transmission.shift_2": "2nd Gear",
"create.engine.upgrade.transmission.shift_3": "3rd Gear",
"create.engine.upgrade.transmission.shift_4": "4th Gear",
"create.engine.upgrade.transmission.shift_5": "5th Gear",
"create.engine.upgrade.transmission.shift_6": "6th Gear",
"create.fe": "FE: %1$s", "create.fe": "FE: %1$s",
"create.flamethrower.fuel.amount": "%s Projectile Amount", "create.flamethrower.fuel.amount": "%s Projectile Amount",
"create.flamethrower.fuel.capacity": "Fuel Capacity: %s", "create.flamethrower.fuel.capacity": "Fuel Capacity: %s",
@@ -542,17 +570,17 @@
"create.goggles.electric_machine.no_power": "No Power", "create.goggles.electric_machine.no_power": "No Power",
"create.goggles.electricity.insufficient_voltage": "Insufficient Voltage", "create.goggles.electricity.insufficient_voltage": "Insufficient Voltage",
"create.goggles.electrode_holder.min_amps": "Not Enough Current (Needs ", "create.goggles.electrode_holder.min_amps": "Not Enough Current (Needs ",
"create.goggles.engine.cooling_fluid": "Cooling Fluid: ", "create.goggles.engine.cooling_fluid": "Cooling Fluid: %s",
"create.goggles.engine.fuel_consumption": " Fuel Consumption:", "create.goggles.engine.fuel_consumption": "Fuel Consumption: %s mB/s",
"create.goggles.engine.header": "Engine Info", "create.goggles.engine.header": "Engine Info",
"create.goggles.engine.next_component": " Next Component: ", "create.goggles.engine.next_component": " Next Component: ",
"create.goggles.engine.oil": "Oil: ", "create.goggles.engine.oil": "Oil: %s",
"create.goggles.engine.pistons_missing": "Pistons Missing", "create.goggles.engine.pistons_missing": "Pistons Missing",
"create.goggles.engine.rpm": " Speed: ", "create.goggles.engine.rpm": "Speed: %s RPM",
"create.goggles.engine.signal": " Signal: ", "create.goggles.engine.signal": "Signal: %s",
"create.goggles.engine.torque": " Torque:", "create.goggles.engine.torque": "Torque: %s",
"create.goggles.engine.turbines_missing": "Turbines Missing", "create.goggles.engine.turbines_missing": "Turbines Missing",
"create.goggles.engine.type": " Type: ", "create.goggles.engine.type": "Type: %s",
"create.goggles.engine.unfinished": "Engine Unfinished", "create.goggles.engine.unfinished": "Engine Unfinished",
"create.goggles.fluid_storage": "Fluid Storage:", "create.goggles.fluid_storage": "Fluid Storage:",
"create.goggles.gauge.value": " Measured Voltage:", "create.goggles.gauge.value": " Measured Voltage:",
@@ -591,6 +619,15 @@
"create.goggles.vat.tfmg.graphite_electrode": " Graphite Electrode", "create.goggles.vat.tfmg.graphite_electrode": " Graphite Electrode",
"create.goggles.vat.tfmg.mixing": " Mixer", "create.goggles.vat.tfmg.mixing": " Mixer",
"create.goggles.voltmeter": "Voltmeter:", "create.goggles.voltmeter": "Voltmeter:",
"create.goggles.voltmeter.mode.capacity": "Capacity",
"create.goggles.voltmeter.mode.current": "Current",
"create.goggles.voltmeter.mode.fallback": "Fallback",
"create.goggles.voltmeter.mode.high_voltage": "Voltage (High)",
"create.goggles.voltmeter.mode.net_power_gen": "Network Power Generation",
"create.goggles.voltmeter.mode.net_power_use": "Network Power Usage",
"create.goggles.voltmeter.mode.power": "Power",
"create.goggles.voltmeter.mode.resistance": "Resistance",
"create.goggles.voltmeter.mode.voltage": "Voltage",
"create.goggles.voltmeter.range": " Range: %1$s", "create.goggles.voltmeter.range": " Range: %1$s",
"create.goggles.winding_machine.header": "Winding Machine", "create.goggles.winding_machine.header": "Winding Machine",
"create.goggles.winding_machine.progress": "Progress: ", "create.goggles.winding_machine.progress": "Progress: ",
@@ -599,13 +636,17 @@
"create.multimeter.additional_values": "Additional Values:", "create.multimeter.additional_values": "Additional Values:",
"create.multimeter.energy_stored": " Energy Stored: ", "create.multimeter.energy_stored": " Energy Stored: ",
"create.multimeter.energy_usage": " Energy Usage: ", "create.multimeter.energy_usage": " Energy Usage: ",
"create.multimeter.group": " Group: ", "create.multimeter.group": " Group: %s",
"create.multimeter.header": "Multimeter Data:", "create.multimeter.header": "Multimeter Data:",
"create.multimeter.power_generated": " Power Generated: ", "create.multimeter.insufficient_power": "NOT ENOUGHT POWER",
"create.multimeter.network.consumption": "Network Power Consumption: %s",
"create.multimeter.network.generation": "Network Power Generation: %s",
"create.multimeter.power_generated": " Power Generated: %s",
"create.multimeter.power_percentage": " Grid Strength: ", "create.multimeter.power_percentage": " Grid Strength: ",
"create.multimeter.power_usage": " Power Usage: ", "create.multimeter.power_usage": " Power Usage: ",
"create.multimeter.separator": "----------------------------",
"create.multimeter.transformer_ratio": " Turn Ratio: ", "create.multimeter.transformer_ratio": " Turn Ratio: ",
"create.multimeter.voltage_generated": " Voltage Generated: ", "create.multimeter.voltage_generated": " Voltage Generated: %s",
"create.network": "Network: %1$s", "create.network": "Network: %1$s",
"create.oil_hammer.reserves": "Oil Reserves: %1$s", "create.oil_hammer.reserves": "Oil Reserves: %1$s",
"create.pumpjack_deposit_amount": "%1$s Buckets", "create.pumpjack_deposit_amount": "%1$s Buckets",
@@ -967,6 +1008,16 @@
"item.tfmg.yellow_multimeter.tooltip.summary": "Shows data about an electrical block and its network", "item.tfmg.yellow_multimeter.tooltip.summary": "Shows data about an electrical block and its network",
"item.tfmg.zinc_electrode": "Zinc Electrode", "item.tfmg.zinc_electrode": "Zinc Electrode",
"item.tfmg.zinc_grenade": "Zinc Grenade", "item.tfmg.zinc_grenade": "Zinc Grenade",
"tfmg.display_source.electricity.current": "Current",
"tfmg.display_source.electricity.network_consumption": "Network Power Consumption",
"tfmg.display_source.electricity.network_generation": "Network Power Generation",
"tfmg.display_source.electricity.network_id": "Network ID",
"tfmg.display_source.electricity.network_resistance": "Network Resistance",
"tfmg.display_source.electricity.power_generation": "Power Generation",
"tfmg.display_source.electricity.power_usage": "Power Usage",
"tfmg.display_source.electricity.resistance": "Resistance",
"tfmg.display_source.electricity.voltage": "Voltage",
"tfmg.display_source.electricity.voltage_generation": "Voltage Generation",
"tfmg.keyinfo.custom_button": "Engine Controller Custom Button", "tfmg.keyinfo.custom_button": "Engine Controller Custom Button",
"tfmg.keyinfo.engine_start": "Start Engine", "tfmg.keyinfo.engine_start": "Start Engine",
"tfmg.keyinfo.transmission_shift_down": "Transmission Shift Down", "tfmg.keyinfo.transmission_shift_down": "Transmission Shift Down",

View File

@@ -57,6 +57,7 @@ public class TFMG {
TFMGSoundEvents.prepare(); TFMGSoundEvents.prepare();
TFMGElectrodes.init(); TFMGElectrodes.init();
TFMGCableTypes.init(); TFMGCableTypes.init();
TFMGDisplaySources.init();
TFMGCreativeTabs.register(modEventBus); TFMGCreativeTabs.register(modEventBus);
TFMGBlocks.init(); TFMGBlocks.init();
TFMGPipes.init(); TFMGPipes.init();

View File

@@ -196,22 +196,20 @@ public interface IElectric {
.forGoggles(tooltip); .forGoggles(tooltip);
if (getData().notEnoughtPower) { if (getData().notEnoughtPower) {
CreateLang.text("NOT ENOUGHT POWER") CreateLang.translate("multimeter.insufficient_power")
.color(Color.RED) .color(Color.RED)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
} }
if (voltageGeneration() > 0) { if (voltageGeneration() > 0) {
CreateLang.translate("multimeter.power_generated") CreateLang.translate("multimeter.power_generated", TFMGUtils.formatUnits(powerGeneration(), "W"))
.add(Component.literal(TFMGUtils.formatUnits(powerGeneration(), "W")))
.color(0x852e4a) .color(0x852e4a)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
CreateLang.translate("multimeter.voltage_generated") CreateLang.translate("multimeter.voltage_generated", TFMGUtils.formatUnits(voltageGeneration(), "V"))
.add(Component.literal(TFMGUtils.formatUnits(voltageGeneration(), "V")))
.color(0x127799) .color(0x127799)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
CreateLang.text("----------------------------") CreateLang.translate("multimeter.separator")
.style(ChatFormatting.WHITE) .style(ChatFormatting.WHITE)
.forGoggles(tooltip); .forGoggles(tooltip);
} }
@@ -229,24 +227,23 @@ public interface IElectric {
.color(0xcc4b74) .color(0xcc4b74)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
if (getData().group.id != -1) { if (getData().group.id != -1) {
CreateLang.text("----------------------------") CreateLang.translate("multimeter.separator")
.style(ChatFormatting.WHITE) .style(ChatFormatting.WHITE)
.forGoggles(tooltip); .forGoggles(tooltip);
CreateLang.translate("multimeter.group") CreateLang.translate("multimeter.group", CreateLang.number(getData().group.id))
.add(CreateLang.number(getData().group.id))
.color(0xd8db27) .color(0xd8db27)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
} }
if (isPlayerSneaking) { if (isPlayerSneaking) {
CreateLang.text("----------------------------") CreateLang.translate("multimeter.separator")
.style(ChatFormatting.WHITE) .style(ChatFormatting.WHITE)
.forGoggles(tooltip); .forGoggles(tooltip);
CreateLang.text("Network Power Generation: " + TFMGUtils.formatUnits(getNetworkPowerGeneration(), "W")) CreateLang.translate("multimeter.network.generation", TFMGUtils.formatUnits(getNetworkPowerGeneration(), "W"))
.color(0xcc4b74) .color(0xcc4b74)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
CreateLang.text("Network Power Consumption: " + TFMGUtils.formatUnits(getNetworkPowerUsage(), "W")) CreateLang.translate("multimeter.network.consumption", TFMGUtils.formatUnits(getNetworkPowerUsage(), "W"))
.color(0xcc4b74) .color(0xcc4b74)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);

View File

@@ -0,0 +1,42 @@
package com.drmangotea.tfmg.content.electricity.display_link;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class CurrentDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
float current = electric.getCurrent();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) current = observed.getCurrent();
}
return Component.literal(TFMGUtils.formatUnits(current, "A"));
}
@Override
protected String getTranslationKey() {
return "electricity.current";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,42 @@
package com.drmangotea.tfmg.content.electricity.display_link;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class PowerGenerationDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
int powerGen = electric.powerGeneration();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) powerGen = observed.powerGeneration();
}
return Component.literal(TFMGUtils.formatUnits(powerGen, "W"));
}
@Override
protected String getTranslationKey() {
return "electricity.power_generation";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,42 @@
package com.drmangotea.tfmg.content.electricity.display_link;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class PowerUsageDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
float powerUsage = electric.getPowerUsage();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) powerUsage = observed.getPowerUsage();
}
return Component.literal(TFMGUtils.formatUnits(powerUsage, "W"));
}
@Override
protected String getTranslationKey() {
return "electricity.power_usage";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,42 @@
package com.drmangotea.tfmg.content.electricity.display_link;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class ResistanceDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
float resistance = electric.voltageGeneration() > 0 ? electric.getGeneratorResistance() : electric.resistance();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) resistance = observed.voltageGeneration() > 0 ? observed.getGeneratorResistance() : observed.resistance();
}
return Component.literal(TFMGUtils.formatUnits(resistance, "Ω"));
}
@Override
protected String getTranslationKey() {
return "electricity.resistance";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,42 @@
package com.drmangotea.tfmg.content.electricity.display_link;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class VoltageDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
int voltage = electric.getData().getVoltage();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) voltage = observed.getData().getVoltage();
}
return Component.literal(TFMGUtils.formatUnits(voltage, "V"));
}
@Override
protected String getTranslationKey() {
return "electricity.voltage";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,42 @@
package com.drmangotea.tfmg.content.electricity.display_link;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class VoltageGenerationDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
int voltageGen = electric.voltageGeneration();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) voltageGen = observed.voltageGeneration();
}
return Component.literal(TFMGUtils.formatUnits(voltageGen, "V"));
}
@Override
protected String getTranslationKey() {
return "electricity.voltage_generation";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,43 @@
package com.drmangotea.tfmg.content.electricity.display_link.network;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.utility.CreateLang;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class NetConsumptionDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
int netUsage = electric.getNetworkPowerUsage();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) netUsage = observed.getNetworkPowerUsage();
}
return Component.literal(TFMGUtils.formatUnits(netUsage, "W"));
}
@Override
protected String getTranslationKey() {
return "electricity.network_consumption";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,43 @@
package com.drmangotea.tfmg.content.electricity.display_link.network;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.utility.CreateLang;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class NetGenerationDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
int netGeneration = electric.getNetworkPowerGeneration();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) netGeneration = observed.getNetworkPowerGeneration();
}
return Component.literal(TFMGUtils.formatUnits(netGeneration, "W"));
}
@Override
protected String getTranslationKey() {
return "electricity.network_generation";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,43 @@
package com.drmangotea.tfmg.content.electricity.display_link.network;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.utility.CreateLang;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class NetIdDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
int id = electric.getData().group.id;
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) id = observed.getData().group.id;
}
if (id == -1) return EMPTY_LINE;
return CreateLang.number(id).component();
}
@Override
protected String getTranslationKey() {
return "electricity.network_id";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -0,0 +1,42 @@
package com.drmangotea.tfmg.content.electricity.display_link.network;
import com.drmangotea.tfmg.base.TFMGUtils;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.ObservedElectricBehaviour;
import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext;
import com.simibubi.create.content.redstone.displayLink.source.SingleLineDisplaySource;
import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.level.block.entity.BlockEntity;
public class NetResistanceDisplaySource extends SingleLineDisplaySource {
@Override
protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) {
BlockEntity sourceBE = context.getSourceBlockEntity();
if (!(sourceBE instanceof SmartBlockEntity smart))
return EMPTY_LINE;
if (!(smart instanceof IElectric electric))
return EMPTY_LINE;
int netResistance = electric.getNetworkResistance();
if (smart.getBehaviour(ObservedElectricBehaviour.TYPE) != null) {
IElectric observed = smart.getBehaviour(ObservedElectricBehaviour.TYPE).getObservedElectric();
if (observed != null) netResistance = observed.getNetworkResistance();
}
return Component.literal(TFMGUtils.formatUnits(netResistance, "Ω"));
}
@Override
protected String getTranslationKey() {
return "electricity.network_resistance";
}
@Override
protected boolean allowsLabeling(DisplayLinkContext context) {
return true;
}
}

View File

@@ -99,7 +99,7 @@ public class VoltMeterBlockEntity extends SmartBlockEntity implements IHaveGoggl
@SuppressWarnings("removal") @SuppressWarnings("removal")
public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking) { public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
CreateLang.text(mode.displayName) CreateLang.translate(mode.langKey)
.style(ChatFormatting.DARK_GRAY) .style(ChatFormatting.DARK_GRAY)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
@@ -116,26 +116,25 @@ public class VoltMeterBlockEntity extends SmartBlockEntity implements IHaveGoggl
public enum MeasureMode { public enum MeasureMode {
VOLTAGE("Voltage", "V", 500), VOLTAGE("V", 500),
HIGH_VOLTAGE("Voltage (High)", "V", 10000), HIGH_VOLTAGE("V", 10000),
CURRENT("Current", "A", 16), CURRENT("A", 16),
RESISTANCE("Resistance", "Ω", 500), RESISTANCE("Ω", 500),
POWER("Power", "W", 5000), POWER("W", 5000),
NETWORK_POWER_USAGE("Network Power Usage", "W", 50000), NETWORK_POWER_USAGE("W", 50000),
NETWORK_POWER_GENERATION("Network Power Generation", "W", 50000), NETWORK_POWER_GENERATION("W", 50000),
CAPACITY("Capacity", "Fe", 300000), CAPACITY("Fe", 300000),
FALLBACK("fallback", "", 0), FALLBACK("", 0),
; ;
public final String displayName;
public final String unit; public final String unit;
public final int defaultRange; public final int defaultRange;
public final String langKey;
MeasureMode(String displayName, String unit, int defaultRange) { MeasureMode(String unit, int defaultRange) {
this.unit = unit; this.unit = unit;
this.displayName = displayName;
this.defaultRange = defaultRange; this.defaultRange = defaultRange;
this.langKey = "goggles.voltmeter.mode." + this.name().toLowerCase();
} }
} }

View File

@@ -89,26 +89,18 @@ public class AccumulatorBlockEntity extends ElectricBlockEntity {
@Override @Override
public boolean makeMultimeterTooltip(List<Component> tooltip, boolean isPlayerSneaking) { public boolean makeMultimeterTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
if (!isController()) if (!isController())
if (level.getBlockEntity(controller) instanceof AccumulatorBlockEntity be) if (level.getBlockEntity(controller) instanceof AccumulatorBlockEntity be)
return be.makeMultimeterTooltip(tooltip, isPlayerSneaking); return be.makeMultimeterTooltip(tooltip, isPlayerSneaking);
super.makeMultimeterTooltip(tooltip, isPlayerSneaking); super.makeMultimeterTooltip(tooltip, isPlayerSneaking);
CreateLang.translate("electricity.capacity", Component.literal(TFMGUtils.formatUnits(energy.getEnergyStored(), "FE")))
CreateLang.text("Capacity ")
.add(Component.literal(TFMGUtils.formatUnits(energy.getEnergyStored(), "FE")))
.color(0x127799) .color(0x127799)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
CreateLang.translate("electricity.charging_rate", CreateLang.number(getChargingRate()))
CreateLang.text("Charging Rate ")
.add(CreateLang.number(getChargingRate()))
.color(0x127799) .color(0x127799)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
CreateLang.text("Max Capacity ") CreateLang.translate("electricity.max_capacity", CreateLang.number(getMaxCapacity()))
.add(CreateLang.number(getMaxCapacity()))
.color(0x127799) .color(0x127799)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);

View File

@@ -179,21 +179,15 @@ public class ConverterBlockEntity extends ElectricBlockEntity {
} }
@Override @Override
public boolean makeMultimeterTooltip(List<Component> tooltip, boolean isPlayerSneaking) { public boolean makeMultimeterTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
super.makeMultimeterTooltip(tooltip, isPlayerSneaking); super.makeMultimeterTooltip(tooltip, isPlayerSneaking);
CreateLang.translate("electricity.capacity", Component.literal(TFMGUtils.formatUnits(energy.getEnergyStored(), "FE")))
CreateLang.text("Capacity ")
.add(Component.literal(TFMGUtils.formatUnits(energy.getEnergyStored(), "FE")))
.color(0x127799) .color(0x127799)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
CreateLang.translate("electricity.charging_rate", CreateLang.number(getChargingRate()))
CreateLang.text("Charging Rate ")
.add(CreateLang.number(getChargingRate()))
.color(0x127799) .color(0x127799)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);
CreateLang.text("Max Capacity ") CreateLang.translate("electricity.max_capacity", CreateLang.number(getMaxCapacity()))
.add(CreateLang.number(getMaxCapacity()))
.color(0x127799) .color(0x127799)
.forGoggles(tooltip, 1); .forGoggles(tooltip, 1);

View File

@@ -128,7 +128,7 @@ public class TransformerBlockEntity extends VoltageAlteringBlockEntity {
super.makeMultimeterTooltip(tooltip, isPlayerSneaking); super.makeMultimeterTooltip(tooltip, isPlayerSneaking);
if(coilRatio!=0) { if(coilRatio!=0) {
CreateLang.text("----------------------------") CreateLang.translate("multimeter.separator")
.style(ChatFormatting.WHITE) .style(ChatFormatting.WHITE)
.forGoggles(tooltip); .forGoggles(tooltip);
CreateLang.translate("multimeter.transformer_ratio") CreateLang.translate("multimeter.transformer_ratio")

View File

@@ -0,0 +1,73 @@
package com.drmangotea.tfmg.content.electricity.utilities.voltage_observer;
import com.drmangotea.tfmg.content.electricity.base.IElectric;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.world.level.block.entity.BlockEntity;
import java.util.Optional;
public class ObservedElectricBehaviour extends BlockEntityBehaviour {
public static final BehaviourType<ObservedElectricBehaviour> TYPE = new BehaviourType<>();
BlockPos observedPos;
public ObservedElectricBehaviour(SmartBlockEntity be) {
super(be);
}
public BlockPos getObservedPos() {
return observedPos;
}
public void setObservedPos(BlockPos observedPos) {
this.observedPos = observedPos;
}
@Override
public void tick() {
super.tick();
if (getObservedPos() != null && !isObservingElectric()) setObservedPos(null);
}
public boolean isObservingElectric() {
if (getObservedPos() == null) return false;
BlockEntity be = getWorld().getBlockEntity(getObservedPos());
return be instanceof IElectric;
}
public IElectric getObservedElectric() {
if (!isObservingElectric()) return null;
BlockEntity be = getWorld().getBlockEntity(getObservedPos());
if (be instanceof IElectric electric) {
return electric;
} else {
throw new IllegalStateException("Observed position does not contain an IElectric block entity: " + getObservedPos());
}
}
@Override
public void write(CompoundTag nbt, HolderLookup.Provider registries, boolean clientPacket) {
super.write(nbt, registries, clientPacket);
if (observedPos != null) {
nbt.put("ObservedPos", NbtUtils.writeBlockPos(observedPos));
}
}
@Override
public void read(CompoundTag nbt, HolderLookup.Provider registries, boolean clientPacket) {
super.read(nbt, registries, clientPacket);
Optional<BlockPos> pos = NbtUtils.readBlockPos(nbt, "ObservedPos");
setObservedPos(pos.orElse(null));
}
@Override
public BehaviourType<?> getType() {
return TYPE;
}
}

View File

@@ -4,11 +4,14 @@ package com.drmangotea.tfmg.content.electricity.utilities.voltage_observer;
import com.drmangotea.tfmg.base.blocks.WallMountBlock; import com.drmangotea.tfmg.base.blocks.WallMountBlock;
import com.drmangotea.tfmg.content.electricity.base.ElectricBlockEntity; import com.drmangotea.tfmg.content.electricity.base.ElectricBlockEntity;
import com.simibubi.create.foundation.blockEntity.ComparatorUtil; import com.simibubi.create.foundation.blockEntity.ComparatorUtil;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import java.util.List;
import static com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.VoltageObserverBlock.POWERED; import static com.drmangotea.tfmg.content.electricity.utilities.voltage_observer.VoltageObserverBlock.POWERED;
@@ -16,10 +19,17 @@ public class VoltageObserverBlockEntity extends ElectricBlockEntity {
boolean update = false; boolean update = false;
ObservedElectricBehaviour observedElectricBehaviour;
public VoltageObserverBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) { public VoltageObserverBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state); super(type, pos, state);
} }
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
behaviours.add(observedElectricBehaviour = new ObservedElectricBehaviour(this));
}
@Override @Override
public void onNetworkChanged(int oldVoltage, int oldPower) { public void onNetworkChanged(int oldVoltage, int oldPower) {
@@ -39,10 +49,17 @@ public class VoltageObserverBlockEntity extends ElectricBlockEntity {
level.updateNeighborsAt(getBlockPos(), getBlockState().getBlock()); level.updateNeighborsAt(getBlockPos(), getBlockState().getBlock());
update = false; update = false;
} }
if (observedElectricBehaviour != null) {
observedElectricBehaviour.setObservedPos(getConnectedPos());
}
} }
@Override @Override
public boolean hasElectricitySlot(Direction direction) { public boolean hasElectricitySlot(Direction direction) {
return direction == getBlockState().getValue(WallMountBlock.FACING); return direction == getBlockState().getValue(WallMountBlock.FACING);
} }
private BlockPos getConnectedPos() {
return getBlockPos().relative(getBlockState().getValue(WallMountBlock.FACING));
}
} }

View File

@@ -535,17 +535,17 @@ public abstract class AbstractSmallEngineBlockEntity extends AbstractEngineBlock
public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking) { public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
if (controller.asLong() == getBlockPos().asLong()) if (controller.asLong() == getBlockPos().asLong())
CreateLang.text("CONTROLLER").forGoggles(tooltip); CreateLang.translate("engine.controller.header").forGoggles(tooltip);
CreateLang.text("Shift " + shift.toString()).forGoggles(tooltip); CreateLang.translate("engine.shift", CreateLang.translate(shift.langKey)).forGoggles(tooltip);
CreateLang.text("Speed Efficiency " + getSpeedEfficiency()).forGoggles(tooltip); CreateLang.translate("engine.speed_efficiency", getSpeedEfficiency()).forGoggles(tooltip);
CreateLang.text("Efficiency " + efficiencyModifier()).forGoggles(tooltip); CreateLang.translate("engine.efficiency", efficiencyModifier()).forGoggles(tooltip);
CreateLang.text("Fuel Consumption " + getFuelConsumption()).forGoggles(tooltip); CreateLang.translate("engine.fuel_consumption", getFuelConsumption()).forGoggles(tooltip);
CreateLang.text("Rpm " + rpm).forGoggles(tooltip); CreateLang.translate("engine.rpm", rpm).forGoggles(tooltip);
CreateLang.text("length " + engineLength()).forGoggles(tooltip); CreateLang.translate("engine.length", engineLength()).forGoggles(tooltip);
CreateLang.text("Torque " + torque).forGoggles(tooltip); CreateLang.translate("engine.torque", torque).forGoggles(tooltip);
CreateLang.text("Injection Rate " + fuelInjectionRate).forGoggles(tooltip); CreateLang.translate("engine.injection_rate", fuelInjectionRate).forGoggles(tooltip);
CreateLang.text("Signal " + highestSignal).forGoggles(tooltip); CreateLang.translate("engine.signal ", highestSignal).forGoggles(tooltip);
CreateLang.number(engineNumber).style(ChatFormatting.DARK_GREEN).forGoggles(tooltip); CreateLang.number(engineNumber).style(ChatFormatting.DARK_GREEN).forGoggles(tooltip);

View File

@@ -403,35 +403,28 @@ public class RegularEngineBlockEntity extends AbstractSmallEngineBlockEntity {
} }
CreateLang.translate("goggles.engine.type") CreateLang.translate("goggles.engine.type", CreateLang.translate(type.langKey))
.add(CreateLang.text(type.name()))
.color(0xfcad03) .color(0xfcad03)
.forGoggles(tooltip); .forGoggles(tooltip, 1);
CreateLang.translate("goggles.engine.rpm") CreateLang.translate("goggles.engine.rpm", (int)rpm)
.add(CreateLang.text((int)rpm+" rpm"))
.color(0xa36f00) .color(0xa36f00)
.forGoggles(tooltip); .forGoggles(tooltip, 1);
CreateLang.translate("goggles.engine.signal") CreateLang.translate("goggles.engine.signal", highestSignal)
.add(CreateLang.text(String.valueOf(highestSignal)))
.color(0xfcad03) .color(0xfcad03)
.forGoggles(tooltip); .forGoggles(tooltip, 1);
CreateLang.translate("goggles.engine.torque") CreateLang.translate("goggles.engine.torque", (int)torque)
.add(CreateLang.text(String.valueOf((int)torque)))
.color(0xa36f00) .color(0xa36f00)
.forGoggles(tooltip); .forGoggles(tooltip, 1);
CreateLang.translate("goggles.engine.fuel_consumption") CreateLang.translate("goggles.engine.fuel_consumption", getFuelConsumption()/1.5f)
.add(CreateLang.text(getFuelConsumption()/1.5f+" mb/s"))
.color(0xfcad03) .color(0xfcad03)
.forGoggles(tooltip); .forGoggles(tooltip, 1);
if(oil>0){ if(oil>0){
CreateLang.translate("goggles.engine.oil") CreateLang.translate("goggles.engine.oil", CreateLang.number(oil))
.add(CreateLang.number(oil))
.color(0xf5dd42) .color(0xf5dd42)
.forGoggles(tooltip); .forGoggles(tooltip);
} }
if(coolingFluid>0){ if(coolingFluid>0){
CreateLang.translate("goggles.engine.cooling_fluid") CreateLang.translate("goggles.engine.cooling_fluid", CreateLang.number(coolingFluid))
.add(CreateLang.number(coolingFluid))
.color(0x51bdb9) .color(0x51bdb9)
.forGoggles(tooltip); .forGoggles(tooltip);
} }
@@ -461,6 +454,7 @@ public class RegularEngineBlockEntity extends AbstractSmallEngineBlockEntity {
public final List<Fluid> fluidBlacklist; public final List<Fluid> fluidBlacklist;
public final String name; public final String name;
public final boolean upgradesOnSide; public final boolean upgradesOnSide;
public final String langKey;
EngineType(String name, List<PistonPosition> positions, float speedModifier, EngineType(String name, List<PistonPosition> positions, float speedModifier,
float torqueModifier, float efficiencyModifier, boolean upgradesOnSide) { float torqueModifier, float efficiencyModifier, boolean upgradesOnSide) {
@@ -481,6 +475,7 @@ public class RegularEngineBlockEntity extends AbstractSmallEngineBlockEntity {
this.effeciencyModifier = efficiencyModifier; this.effeciencyModifier = efficiencyModifier;
this.fluidBlacklist = fluidBlacklist; this.fluidBlacklist = fluidBlacklist;
this.upgradesOnSide = upgradesOnSide; this.upgradesOnSide = upgradesOnSide;
this.langKey = "engine.type." + name;
} }

View File

@@ -69,17 +69,18 @@ public class TransmissionUpgrade extends EngineUpgrade{
SHIFT_5(1.5f), SHIFT_5(1.5f),
SHIFT_6(1.9f) SHIFT_6(1.9f)
; ;
public final float value; public final float value;
public final boolean reverse; public final boolean reverse;
public final String langKey;
TransmissionState(float value){ TransmissionState(float value){
this(value,false); this(value,false);
} }
TransmissionState(float value, boolean reverse){ TransmissionState(float value, boolean reverse){
this.value = value; this.value = value;
this.reverse = reverse; this.reverse = reverse;
this.langKey = "engine.upgrade.transmission." + this.name().toLowerCase();
} }
} }
} }

View File

@@ -1,11 +1,13 @@
package com.drmangotea.tfmg.content.items.weapons.flamethrover; package com.drmangotea.tfmg.content.items.weapons.flamethrover;
import com.drmangotea.tfmg.TFMGRegistries; import com.drmangotea.tfmg.TFMGRegistries;
import com.drmangotea.tfmg.registry.TFMGFlamethrowerFuelTypes;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.RegistryAccess; import net.minecraft.core.RegistryAccess;
import net.minecraft.nbt.Tag;
import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
@@ -29,21 +31,21 @@ public record FlamethrowerFuel(@Nullable ResourceKey<FlamethrowerFuelType> fuelT
ByteBufCodecs.INT, ByteBufCodecs.INT,
FlamethrowerFuel::amount, FlamethrowerFuel::amount,
ByteBufCodecs.INT, ByteBufCodecs.INT,
fuel -> fuel.color == 0 ? 0xFFFFFF : fuel.color, FlamethrowerFuel::color,
FlamethrowerFuel::new FlamethrowerFuel::new
); );
public static final FlamethrowerFuel EMPTY = new FlamethrowerFuel(null, 0, 0xFFFFFF); public static final FlamethrowerFuel EMPTY = new FlamethrowerFuel(TFMGFlamethrowerFuelTypes.FALLBACK, 0, 0xFFFFFF);
public FlamethrowerFuel decrement(int amount) { public FlamethrowerFuel decrement(int amount) {
if (this.amount <= amount || fuelType == null) { if (this.amount <= amount || fuelType == TFMGFlamethrowerFuelTypes.FALLBACK) {
return EMPTY; return EMPTY;
} }
return new FlamethrowerFuel(fuelType, this.amount - amount, color); return new FlamethrowerFuel(fuelType, this.amount - amount, color);
} }
public FlamethrowerFuel increment(int amount, int capacity) { public FlamethrowerFuel increment(int amount, int capacity) {
if (fuelType == null) { if (fuelType == TFMGFlamethrowerFuelTypes.FALLBACK) {
return EMPTY; return EMPTY;
} }
if (this.amount + amount > capacity) { if (this.amount + amount > capacity) {
@@ -54,7 +56,7 @@ public record FlamethrowerFuel(@Nullable ResourceKey<FlamethrowerFuelType> fuelT
public static FlamethrowerFuel createForType(RegistryAccess registryAccess, Fluid fluid, int amount) { public static FlamethrowerFuel createForType(RegistryAccess registryAccess, Fluid fluid, int amount) {
Optional<Holder.Reference<FlamethrowerFuelType>> type = FlamethrowerFuelType.getTypeForFluid(registryAccess, fluid); Optional<Holder.Reference<FlamethrowerFuelType>> type = FlamethrowerFuelType.getTypeForFluid(registryAccess, fluid);
return type.map(typeReference -> new FlamethrowerFuel(typeReference.getKey(), amount, typeReference.value().color())).orElse(null); return type.map(typeReference -> new FlamethrowerFuel(typeReference.getKey(), amount, typeReference.value().color())).orElse(EMPTY);
} }
public static FlamethrowerFuel createForType(RegistryAccess registryAccess, FluidStack stack) { public static FlamethrowerFuel createForType(RegistryAccess registryAccess, FluidStack stack) {
@@ -62,14 +64,14 @@ public record FlamethrowerFuel(@Nullable ResourceKey<FlamethrowerFuelType> fuelT
} }
public boolean isEmpty() { public boolean isEmpty() {
if (fuelType == null) { if (fuelType == TFMGFlamethrowerFuelTypes.FALLBACK) {
return true; return true;
} }
return this.amount <= 0; return this.amount <= 0;
} }
public boolean hasFuel() { public boolean hasFuel() {
return fuelType != null; return fuelType != TFMGFlamethrowerFuelTypes.FALLBACK;
} }
public Optional<FlamethrowerFuelType> getFuelType(RegistryAccess registryAccess) { public Optional<FlamethrowerFuelType> getFuelType(RegistryAccess registryAccess) {

View File

@@ -1,9 +1,11 @@
package com.drmangotea.tfmg.content.items.weapons.flamethrover; package com.drmangotea.tfmg.content.items.weapons.flamethrover;
import com.drmangotea.tfmg.TFMGClient; import com.drmangotea.tfmg.TFMGClient;
import com.drmangotea.tfmg.TFMGRegistries;
import com.drmangotea.tfmg.base.spark.Spark; import com.drmangotea.tfmg.base.spark.Spark;
import com.drmangotea.tfmg.registry.TFMGDataComponents; import com.drmangotea.tfmg.registry.TFMGDataComponents;
import com.drmangotea.tfmg.registry.TFMGEntityTypes; import com.drmangotea.tfmg.registry.TFMGEntityTypes;
import com.drmangotea.tfmg.registry.TFMGFlamethrowerFuelTypes;
import com.simibubi.create.content.equipment.zapper.ShootableGadgetItemMethods; import com.simibubi.create.content.equipment.zapper.ShootableGadgetItemMethods;
import com.simibubi.create.foundation.item.CustomArmPoseItem; import com.simibubi.create.foundation.item.CustomArmPoseItem;
import com.simibubi.create.foundation.utility.CreateLang; import com.simibubi.create.foundation.utility.CreateLang;
@@ -24,6 +26,7 @@ import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@@ -55,6 +58,11 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
super(pProperties); super(pProperties);
} }
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) {
super.inventoryTick(stack, level, entity, slotId, isSelected);
if(!stack.has(TFMGDataComponents.FLAMETHROWER_FUEL))
stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY);
}
public void onUseTick(Level level, LivingEntity entity, ItemStack stack, int time) { public void onUseTick(Level level, LivingEntity entity, ItemStack stack, int time) {
if (stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY) == FlamethrowerFuel.EMPTY) if (stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY) == FlamethrowerFuel.EMPTY)
@@ -62,18 +70,12 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
int fuelAmount = stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY).amount(); int fuelAmount = stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY).amount();
if(!stack.has(TFMGDataComponents.FLAMETHROWER_FUEL))
stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY);
if(fuelAmount==0) { if(fuelAmount==0) {
stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY); stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY);
entity.stopUsingItem();
return; return;
} }
level.playSound(null, entity.getX(), entity.getY(), entity.getZ(), SoundEvents.FIRE_EXTINGUISH, SoundSource.NEUTRAL, 0.1F, 0.04F); level.playSound(null, entity.getX(), entity.getY(), entity.getZ(), SoundEvents.FIRE_EXTINGUISH, SoundSource.NEUTRAL, 0.1F, 0.04F);
FlamethrowerFuel fuel = stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY); FlamethrowerFuel fuel = stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY);
@@ -82,18 +84,22 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
Vec3 barrelPos = getGunBarrelVec(entity, entity.getUsedItemHand() == InteractionHand.MAIN_HAND, Vec3 barrelPos = getGunBarrelVec(entity, entity.getUsedItemHand() == InteractionHand.MAIN_HAND,
new Vec3(.75f, -0.65f, 1.5f)); new Vec3(.75f, -0.65f, 1.5f));
if (fuel.fuelType() != TFMGFlamethrowerFuelTypes.FALLBACK && fuel.amount() > 0) {
int amountToFire = Math.min(fuelType.amount(), fuel.amount());
for(int i =0; i < fuelType.amount(); i++) { for(int i =0; i < amountToFire; i++) {
Spark spark = TFMGEntityTypes.SPARK.create(level); Spark spark = TFMGEntityTypes.SPARK.create(level);
if (spark != null) { if (spark != null) {
spark.setPos(barrelPos.x, barrelPos.y, barrelPos.z); spark.setPos(barrelPos.x, barrelPos.y, barrelPos.z);
spark.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, fuelType.speed(), fuelType.spread()); spark.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, fuelType.speed(), fuelType.spread());
level.addFreshEntity(spark); level.addFreshEntity(spark);
stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, fuel.decrement(1)); }
} }
int fuelConsumed = level.random.nextIntBetweenInclusive(amountToFire / 2, amountToFire);
stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, fuel.decrement(fuelConsumed));
} else {
stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY);
entity.stopUsingItem();
} }
} }
public static Vec3 getGunBarrelVec(LivingEntity entity, boolean mainHand, Vec3 rightHandForward) { public static Vec3 getGunBarrelVec(LivingEntity entity, boolean mainHand, Vec3 rightHandForward) {
@@ -110,7 +116,7 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
@Override @Override
public boolean isBarVisible(ItemStack stack) { public boolean isBarVisible(ItemStack stack) {
if(!stack.has(TFMGDataComponents.FLAMETHROWER_FUEL) || stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY).isEmpty()) if(!stack.has(TFMGDataComponents.FLAMETHROWER_FUEL))
return false; return false;
return !stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY).isEmpty(); return !stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY).isEmpty();
@@ -175,8 +181,8 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
int toDrain = Math.min(FUEL_CAPACITY - containedFuel, fluidStack.getAmount()); int toDrain = Math.min(FUEL_CAPACITY - containedFuel, fluidStack.getAmount());
FluidStack stackToDrain = fluidStack.copyWithAmount(toDrain); FluidStack stackToDrain = fluidStack.copyWithAmount(toDrain);
FlamethrowerFuel fuel = FlamethrowerFuel.createForType(level.registryAccess(), fluidStack.getFluid(), toDrain); FlamethrowerFuel fuel = FlamethrowerFuel.createForType(level.registryAccess(), fluidStack.getFluid(), toDrain);
if (fuel == null) continue; if (fuel == FlamethrowerFuel.EMPTY) continue;
if (fuelType != null) { if (fuelType != TFMGFlamethrowerFuelTypes.FALLBACK) {
if (fuelType.equals(fuel.fuelType())) { if (fuelType.equals(fuel.fuelType())) {
stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, existingFuel.increment(toDrain, FUEL_CAPACITY)); stack.set(TFMGDataComponents.FLAMETHROWER_FUEL, existingFuel.increment(toDrain, FUEL_CAPACITY));
capability.drain(stackToDrain, IFluidHandler.FluidAction.EXECUTE); capability.drain(stackToDrain, IFluidHandler.FluidAction.EXECUTE);
@@ -199,8 +205,8 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
@Nullable @Nullable
public static FlamethrowerFuelType getFuel(RegistryAccess registryAccess, ItemStack heldStack) { public static FlamethrowerFuelType getFuel(RegistryAccess registryAccess, ItemStack heldStack) {
var type = heldStack.get(TFMGDataComponents.FLAMETHROWER_FUEL).getFuelType(registryAccess); var type = heldStack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY).getFuelType(registryAccess);
return type.orElse(null); return type.orElse(registryAccess.registryOrThrow(TFMGRegistries.FLAMETHROWER_FUEL_TYPE).get(TFMGFlamethrowerFuelTypes.FALLBACK));
} }
@Override @Override
@@ -215,13 +221,16 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
super.appendHoverText(stack, context, tooltip, flag); super.appendHoverText(stack, context, tooltip, flag);
return; return;
} }
FlamethrowerFuelType fallback = player.registryAccess().registryOrThrow(TFMGRegistries.FLAMETHROWER_FUEL_TYPE).get(TFMGFlamethrowerFuelTypes.FALLBACK);
FlamethrowerFuelType fuelType = getFuel(player.registryAccess(), stack); FlamethrowerFuelType fuelType = getFuel(player.registryAccess(), stack);
if (fuelType == null) { FlamethrowerFuel fuel = stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY);
if (fuelType == fallback || !fuel.hasFuel()) {
super.appendHoverText(stack, context, tooltip, flag); super.appendHoverText(stack, context, tooltip, flag);
return; return;
} }
FluidStack fuelFluid = new FluidStack(fuelType.fluids().get(0).value(), 1); FluidStack fuelFluid = new FluidStack(fuelType.fluids().get(0).value(), 1);
FlamethrowerFuel fuel = stack.getOrDefault(TFMGDataComponents.FLAMETHROWER_FUEL, FlamethrowerFuel.EMPTY);
String _spread = "flamethrower.fuel.spread"; String _spread = "flamethrower.fuel.spread";
String _speed = "flamethrower.fuel.speed"; String _speed = "flamethrower.fuel.speed";
@@ -284,6 +293,11 @@ public class FlamethrowerItem extends Item implements CustomArmPoseItem {
return slotChanged || newStack.getItem() != oldStack.getItem(); return slotChanged || newStack.getItem() != oldStack.getItem();
} }
@Override
public boolean onEntitySwing(ItemStack stack, LivingEntity entity, InteractionHand hand) {
return true;
}
@Override @Override
@Nullable @Nullable
public HumanoidModel.ArmPose getArmPose(ItemStack stack, AbstractClientPlayer player, InteractionHand hand) { public HumanoidModel.ArmPose getArmPose(ItemStack stack, AbstractClientPlayer player, InteractionHand hand) {

View File

@@ -111,6 +111,7 @@ import com.drmangotea.tfmg.content.machinery.vat.base.VatBlock;
import com.drmangotea.tfmg.content.machinery.vat.base.VatGenerator; import com.drmangotea.tfmg.content.machinery.vat.base.VatGenerator;
import com.drmangotea.tfmg.content.machinery.vat.electrode_holder.ElectrodeHolderBlock; import com.drmangotea.tfmg.content.machinery.vat.electrode_holder.ElectrodeHolderBlock;
import com.drmangotea.tfmg.content.machinery.vat.industrial_mixer.IndustrialMixerBlock; import com.drmangotea.tfmg.content.machinery.vat.industrial_mixer.IndustrialMixerBlock;
import com.simibubi.create.AllDisplaySources;
import com.simibubi.create.AllTags; import com.simibubi.create.AllTags;
import com.simibubi.create.api.stress.BlockStressValues; import com.simibubi.create.api.stress.BlockStressValues;
import com.simibubi.create.content.contraptions.bearing.StabilizedBearingMovementBehaviour; import com.simibubi.create.content.contraptions.bearing.StabilizedBearingMovementBehaviour;
@@ -151,6 +152,7 @@ import java.util.Map;
import static com.drmangotea.tfmg.TFMG.REGISTRATE; import static com.drmangotea.tfmg.TFMG.REGISTRATE;
import static com.drmangotea.tfmg.base.TFMGBuilderTransformers.*; import static com.drmangotea.tfmg.base.TFMGBuilderTransformers.*;
import static com.drmangotea.tfmg.content.electricity.lights.LightBulbBlock.LIGHT; import static com.drmangotea.tfmg.content.electricity.lights.LightBulbBlock.LIGHT;
import static com.simibubi.create.api.behaviour.display.DisplaySource.displaySource;
import static com.simibubi.create.api.behaviour.movement.MovementBehaviour.movementBehaviour; import static com.simibubi.create.api.behaviour.movement.MovementBehaviour.movementBehaviour;
import static com.simibubi.create.api.contraption.storage.fluid.MountedFluidStorageType.mountedFluidStorage; import static com.simibubi.create.api.contraption.storage.fluid.MountedFluidStorageType.mountedFluidStorage;
import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock; import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock;
@@ -1206,6 +1208,16 @@ public class TFMGBlocks {
.transform(pickaxeOnly()) .transform(pickaxeOnly())
.properties(BlockBehaviour.Properties::noOcclusion) .properties(BlockBehaviour.Properties::noOcclusion)
.blockstate(new VoltageObserverGenerator()::generate) .blockstate(new VoltageObserverGenerator()::generate)
.transform(displaySource(TFMGDisplaySources.CURRENT))
.transform(displaySource(TFMGDisplaySources.POWER_USAGE))
.transform(displaySource(TFMGDisplaySources.RESISTANCE))
.transform(displaySource(TFMGDisplaySources.VOLTAGE))
.transform(displaySource(TFMGDisplaySources.POWER_GENERATION))
.transform(displaySource(TFMGDisplaySources.VOLTAGE_GENERATION))
.transform(displaySource(TFMGDisplaySources.NETWORK_CONSUMPTION))
.transform(displaySource(TFMGDisplaySources.NETWORK_GENERATION))
.transform(displaySource(TFMGDisplaySources.NETWORK_ID))
.transform(displaySource(TFMGDisplaySources.NETWORK_RESISTANCE))
.item() .item()
.transform(customItemModel()) .transform(customItemModel())
.register(); .register();

View File

@@ -0,0 +1,38 @@
package com.drmangotea.tfmg.registry;
import com.drmangotea.tfmg.TFMG;
import com.drmangotea.tfmg.base.TFMGRegistrate;
import com.drmangotea.tfmg.content.electricity.display_link.*;
import com.drmangotea.tfmg.content.electricity.display_link.network.NetConsumptionDisplaySource;
import com.drmangotea.tfmg.content.electricity.display_link.network.NetGenerationDisplaySource;
import com.drmangotea.tfmg.content.electricity.display_link.network.NetIdDisplaySource;
import com.drmangotea.tfmg.content.electricity.display_link.network.NetResistanceDisplaySource;
import com.simibubi.create.api.behaviour.display.DisplaySource;
import com.tterrag.registrate.util.entry.RegistryEntry;
import java.util.function.Supplier;
public class TFMGDisplaySources {
private static final TFMGRegistrate REGISTRATE = TFMG.registrate();
// Electricity Display Sources
public static final RegistryEntry<DisplaySource, CurrentDisplaySource> CURRENT = simple("current", CurrentDisplaySource::new);
public static final RegistryEntry<DisplaySource, PowerUsageDisplaySource> POWER_USAGE = simple("power_usage", PowerUsageDisplaySource::new);
public static final RegistryEntry<DisplaySource, ResistanceDisplaySource> RESISTANCE = simple("resistance", ResistanceDisplaySource::new);
public static final RegistryEntry<DisplaySource, VoltageDisplaySource> VOLTAGE = simple("voltage", VoltageDisplaySource::new);
public static final RegistryEntry<DisplaySource, PowerGenerationDisplaySource> POWER_GENERATION = simple("power_generation", PowerGenerationDisplaySource::new);
public static final RegistryEntry<DisplaySource, VoltageGenerationDisplaySource> VOLTAGE_GENERATION = simple("voltage_generation", VoltageGenerationDisplaySource::new);
// Electricity Network Display Sources
public static final RegistryEntry<DisplaySource, NetConsumptionDisplaySource> NETWORK_CONSUMPTION = simple("network_consumption", NetConsumptionDisplaySource::new);
public static final RegistryEntry<DisplaySource, NetGenerationDisplaySource> NETWORK_GENERATION = simple("network_generation", NetGenerationDisplaySource::new);
public static final RegistryEntry<DisplaySource, NetIdDisplaySource> NETWORK_ID = simple("network_id", NetIdDisplaySource::new);
public static final RegistryEntry<DisplaySource, NetResistanceDisplaySource> NETWORK_RESISTANCE = simple("network_resistance", NetResistanceDisplaySource::new);
private static <T extends DisplaySource> RegistryEntry<DisplaySource, T> simple(String name, Supplier<T> supplier) {
return REGISTRATE.displaySource(name, supplier).register();
}
public static void init() {
}
}

View File

@@ -68,13 +68,13 @@
"create.goggles.voltmeter.range": " Range: %1$s", "create.goggles.voltmeter.range": " Range: %1$s",
"create.goggles.engine.header": "Engine Info", "create.goggles.engine.header": "Engine Info",
"create.goggles.engine.type": " Type: ", "create.goggles.engine.type": "Type: %s",
"create.goggles.engine.rpm": " Speed: ", "create.goggles.engine.rpm": "Speed: %s RPM",
"create.goggles.engine.signal": " Signal: ", "create.goggles.engine.signal": "Signal: %s",
"create.goggles.engine.torque": " Torque:", "create.goggles.engine.torque": "Torque: %s",
"create.goggles.engine.fuel_consumption": " Fuel Consumption:", "create.goggles.engine.fuel_consumption": "Fuel Consumption: %s mB/s",
"create.goggles.engine.oil": "Oil: ", "create.goggles.engine.oil": "Oil: %s",
"create.goggles.engine.cooling_fluid": "Cooling Fluid: ", "create.goggles.engine.cooling_fluid": "Cooling Fluid: %s",
"create.goggles.engine.unfinished": "Engine Unfinished", "create.goggles.engine.unfinished": "Engine Unfinished",
"create.goggles.engine.next_component": " Next Component: ", "create.goggles.engine.next_component": " Next Component: ",
"create.goggles.engine.pistons_missing": "Pistons Missing", "create.goggles.engine.pistons_missing": "Pistons Missing",
@@ -143,16 +143,73 @@
"tfmg.keyinfo.transmission_shift_down": "Transmission Shift Down", "tfmg.keyinfo.transmission_shift_down": "Transmission Shift Down",
"create.multimeter.header": "Multimeter Data:", "create.multimeter.header": "Multimeter Data:",
"create.multimeter.separator": "----------------------------",
"create.multimeter.insufficient_power": "NOT ENOUGHT POWER",
"create.multimeter.additional_values": "Additional Values:", "create.multimeter.additional_values": "Additional Values:",
"create.multimeter.power_usage": " Power Usage: ", "create.multimeter.power_usage": " Power Usage: ",
"create.multimeter.group": " Group: ", "create.multimeter.group": " Group: %s",
"create.multimeter.voltage_generated": " Voltage Generated: ", "create.multimeter.voltage_generated": " Voltage Generated: %s",
"create.multimeter.power_generated": " Power Generated: ", "create.multimeter.power_generated": " Power Generated: %s",
"create.multimeter.power_percentage": " Grid Strength: ", "create.multimeter.power_percentage": " Grid Strength: ",
"create.multimeter.energy_usage": " Energy Usage: ", "create.multimeter.energy_usage": " Energy Usage: ",
"create.multimeter.energy_stored": " Energy Stored: ", "create.multimeter.energy_stored": " Energy Stored: ",
"create.multimeter.network.generation": "Network Power Generation: %s",
"create.multimeter.network.consumption": "Network Power Consumption: %s",
"create.multimeter.transformer_ratio": " Turn Ratio: ", "create.multimeter.transformer_ratio": " Turn Ratio: ",
"create.electricity.capacity": "Capacity: %s",
"create.electricity.charging_rate": "Charging Rate: %s",
"create.electricity.max_capacity": "Max Capacity: %s",
"create.engine.controller.header": "Engine Controller",
"create.engine.shift": "Shift: %s",
"create.engine.speed_efficiency": "Speed Efficiency: %s",
"create.engine.efficiency": "Efficiency: %s",
"create.engine.fuel_consumption": "Fuel Consumption: %s",
"create.engine.rpm": "RPM: %s",
"create.engine.length": "Length: %s",
"create.engine.torque": "Torque: %s",
"create.engine.injection_rate": "Injection Rate: %s",
"create.engine.signal": "Signal: %s",
"create.engine.upgrade.transmission.reverse": "Reverse",
"create.engine.upgrade.transmission.neutral": "Neutral",
"create.engine.upgrade.transmission.shift_1": "1st Gear",
"create.engine.upgrade.transmission.shift_2": "2nd Gear",
"create.engine.upgrade.transmission.shift_3": "3rd Gear",
"create.engine.upgrade.transmission.shift_4": "4th Gear",
"create.engine.upgrade.transmission.shift_5": "5th Gear",
"create.engine.upgrade.transmission.shift_6": "6th Gear",
"create.engine.type.engine_i": "I",
"create.engine.type.engine_v": "V",
"create.engine.type.engine_w": "W",
"create.engine.type.engine_u": "U",
"create.engine.type.boxer": "Boxer",
"create.engine.type.radial": "Radial",
"create.engine.type.turbine": "Turbine",
"create.goggles.voltmeter.mode.voltage": "Voltage",
"create.goggles.voltmeter.mode.high_voltage": "Voltage (High)",
"create.goggles.voltmeter.mode.current": "Current",
"create.goggles.voltmeter.mode.resistance": "Resistance",
"create.goggles.voltmeter.mode.power": "Power",
"create.goggles.voltmeter.mode.net_power_use": "Network Power Usage",
"create.goggles.voltmeter.mode.net_power_gen": "Network Power Generation",
"create.goggles.voltmeter.mode.capacity": "Capacity",
"create.goggles.voltmeter.mode.fallback": "Fallback",
"tfmg.display_source.electricity.power_usage": "Power Usage",
"tfmg.display_source.electricity.network_resistance": "Network Resistance",
"tfmg.display_source.electricity.voltage": "Voltage",
"tfmg.display_source.electricity.network_consumption": "Network Power Consumption",
"tfmg.display_source.electricity.current": "Current",
"tfmg.display_source.electricity.network_id": "Network ID",
"tfmg.display_source.electricity.resistance": "Resistance",
"tfmg.display_source.electricity.network_generation": "Network Power Generation",
"tfmg.display_source.electricity.power_generation": "Power Generation",
"tfmg.display_source.electricity.voltage_generation": "Voltage Generation",
"item.minecraft.potion.effect.hellfire_potion": "Potion of Hellfire", "item.minecraft.potion.effect.hellfire_potion": "Potion of Hellfire",
"item.minecraft.splash_potion.effect.hellfire_potion": "Splash Potion of Hellfire", "item.minecraft.splash_potion.effect.hellfire_potion": "Splash Potion of Hellfire",
"item.minecraft.lingering_potion.effect.hellfire_potion": "Lingering Potion of Hellfire", "item.minecraft.lingering_potion.effect.hellfire_potion": "Lingering Potion of Hellfire",