From 31cfdcee59ddfc2f136a07d2c3175363e7373b58 Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 10 Aug 2026 15:15:51 +0200 Subject: [PATCH] qmaw composing --- changelog | 6 +++- .../network/pneumatic/PneumoStorageMono.java | 8 +++++ .../com/hbm/items/special/ItemSatellite.java | 1 + .../hbm/items/tool/ItemPollutionDetector.java | 1 - src/main/java/com/hbm/qmaw/GuiQMAW.java | 33 ++++++++++++++++-- src/main/java/com/hbm/qmaw/ManualElement.java | 2 +- .../hbm/qmaw/components/QComponentLink.java | 11 ++++-- .../hbm/qmaw/components/QComponentText.java | 2 +- .../satellites/SatelliteScience.java | 9 +++++ .../satellites/XSatelliteRegistry.java | 2 ++ src/main/resources/assets/hbm/lang/en_US.lang | 2 +- .../hbm/manual/concepts/fluidhandling.json | 10 ------ .../assets/hbm/manual/machine/dieselgen.json | 2 +- .../hbm/manual/satellite/satellite.json | 4 +-- .../assets/hbm/manual/satellite/scansat.json | 1 + .../assets/hbm/manual/satellite/spysat.json | 2 +- .../manual/satellite/template_satellites.json | 13 +++++++ .../hbm/textures/items/satellite.science.png | Bin 0 -> 429 bytes 18 files changed, 86 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/hbm/saveddata/satellites/SatelliteScience.java delete mode 100644 src/main/resources/assets/hbm/manual/concepts/fluidhandling.json create mode 100644 src/main/resources/assets/hbm/manual/satellite/template_satellites.json create mode 100644 src/main/resources/assets/hbm/textures/items/satellite.science.png diff --git a/changelog b/changelog index c594e4738..6e116ec7d 100644 --- a/changelog +++ b/changelog @@ -18,7 +18,11 @@ * Conveyor belts being destroyed due to item cramming can now be configured with the server config `CONVEYOR_CRAM_EXPLODE`, it is still on by default * Conveyor items will no longer break any belts, even with the config enabled, if the conveyor item entities have existed for less than one cram check cycle * This means that items that have piled up due to chunk loading should now safely self-destruct without breaking conveyor lines +* QMAW now has a composing feature, using double curly brackets and the internal name of another page, this page's contents can be imported + * This means that things like long "see also" lists can now be on a single shared page instead of being hand written for every article +* QMAW links for pages you're already on now have a special color ## Fixed * Fixed pollution detector localization not working, showing only error messages instead of the pollution type names -* Fixed un-clamped gaussian random use on the wideband detector satellite, causing uncommon detections with inaccuracy exceeding the intended amount \ No newline at end of file +* Fixed un-clamped gaussian random use on the wideband detector satellite, causing uncommon detections with inaccuracy exceeding the intended amount +* Fixed PSN bulk storage duping itself when broken \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java index 73d9f4742..909216ba1 100644 --- a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java +++ b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageMono.java @@ -1,5 +1,7 @@ package com.hbm.blocks.network.pneumatic; +import java.util.Random; + import com.hbm.main.MainRegistry; import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageMono; @@ -9,6 +11,7 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -35,6 +38,11 @@ public class PneumoStorageMono extends BlockContainer { return false; } + @Override + public Item getItemDropped(int i, Random rand, int j) { + return null; + } + @Override public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { diff --git a/src/main/java/com/hbm/items/special/ItemSatellite.java b/src/main/java/com/hbm/items/special/ItemSatellite.java index 98af0d64d..e0e05289f 100644 --- a/src/main/java/com/hbm/items/special/ItemSatellite.java +++ b/src/main/java/com/hbm/items/special/ItemSatellite.java @@ -27,6 +27,7 @@ public class ItemSatellite extends ItemEnumMulti implements ISatChip { RELAY, DETECTOR, RAY_SCAN, + SCIENCE, } @Override diff --git a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java index c35e5ab44..bfffb8216 100644 --- a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java +++ b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java @@ -6,7 +6,6 @@ import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; -import com.hbm.util.i18n.I18nUtil; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayerMP; diff --git a/src/main/java/com/hbm/qmaw/GuiQMAW.java b/src/main/java/com/hbm/qmaw/GuiQMAW.java index f56c9f6d7..279bf3282 100644 --- a/src/main/java/com/hbm/qmaw/GuiQMAW.java +++ b/src/main/java/com/hbm/qmaw/GuiQMAW.java @@ -50,6 +50,34 @@ public class GuiQMAW extends GuiScreen { qmawID = qmaw.name; parseQMAW(qmaw); } + + /** Preprocessor before actual parsing begins, imports contents from other QMAWs using curly bracket notation */ + protected String compose(String contents) { + LanguageManager lang = Minecraft.getMinecraft().getLanguageManager(); + String langCode = lang.getCurrentLanguage().getLanguageCode(); + int recursionBrake = 100; + + while(contents.contains("{{") && recursionBrake > 0) { + + int begin = contents.indexOf("{{"); + int end = contents.indexOf("}}"); + if(end < begin) break; + + String composeTag = contents.substring(begin + 2, end); + QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(composeTag); + String substitute = composeTag; + + if(qmaw != null) { + if(qmaw.contents.containsKey(langCode)) substitute = qmaw.contents.get(langCode); + else if(qmaw.contents.containsKey(EN_US)) substitute = qmaw.contents.get(EN_US); + } + + contents = contents.replace("{{" + composeTag + "}}", substitute); + recursionBrake--; + } + + return contents; + } protected void parseQMAW(QuickManualAndWiki qmaw) { LanguageManager lang = Minecraft.getMinecraft().getLanguageManager(); @@ -63,7 +91,8 @@ public class GuiQMAW extends GuiScreen { String toParse = qmaw.contents.get(lang.getCurrentLanguage().getLanguageCode()); if(toParse == null) toParse = qmaw.contents.get(EN_US); if(toParse == null) toParse = "Missing Localization!"; - toParse = "" + toParse; // strings are reference types, no? + + toParse = compose(toParse); int maxLineLength = xSize - 29; String prevToParse = "" + toParse; @@ -336,7 +365,7 @@ public class GuiQMAW extends GuiScreen { int elementX = x + inset; int elementY = y + (maxHeight - element.getHeight()) / 2; boolean mouseOver = (elementX <= mouseX && elementX + element.getWidth() > mouseX && elementY < mouseY && elementY + element.getHeight() >= mouseY); - element.render(mouseOver, elementX, elementY, mouseX, mouseY); + element.render(mouseOver, elementX, elementY, mouseX, mouseY, this); if(elementX <= lastClickX && elementX + element.getWidth() > lastClickX && elementY < lastClickY && elementY + element.getHeight() >= lastClickY) element.onClick(this); inset += element.getWidth(); diff --git a/src/main/java/com/hbm/qmaw/ManualElement.java b/src/main/java/com/hbm/qmaw/ManualElement.java index 92ab74a13..ca4e84db3 100644 --- a/src/main/java/com/hbm/qmaw/ManualElement.java +++ b/src/main/java/com/hbm/qmaw/ManualElement.java @@ -4,6 +4,6 @@ public abstract class ManualElement { public abstract int getWidth(); public abstract int getHeight(); - public abstract void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY); + public abstract void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY, GuiQMAW parent); public abstract void onClick(GuiQMAW gui); } diff --git a/src/main/java/com/hbm/qmaw/components/QComponentLink.java b/src/main/java/com/hbm/qmaw/components/QComponentLink.java index abc4403ed..c707467a2 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentLink.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentLink.java @@ -25,6 +25,7 @@ public class QComponentLink extends ManualElement { protected FontRenderer font; protected int color = 0x0094FF; protected int hoverColor = 0xFFD800; + protected int occupiedColor = 0xA0A0A0; protected static RenderItem itemRender = new RenderItem(); @@ -59,7 +60,7 @@ public class QComponentLink extends ManualElement { } @Override - public void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY) { + public void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY, GuiQMAW parent) { if(this.icon != null) { @@ -81,10 +82,16 @@ public class QComponentLink extends ManualElement { y += (16 - font.FONT_HEIGHT) / 2; } - font.drawString(text, x, y, isMouseOver ? hoverColor : color); + int color = this.color; + if(isMouseOver) color = this.hoverColor; + if(parent.qmawID.equals(link)) color = this.occupiedColor; + + font.drawString(text, x, y, color); } @Override public void onClick(GuiQMAW gui) { + if(gui.qmawID.equals(link)) return; + QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(link); if(qmaw != null) { Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); diff --git a/src/main/java/com/hbm/qmaw/components/QComponentText.java b/src/main/java/com/hbm/qmaw/components/QComponentText.java index efcb0ffd8..abc3b6e05 100644 --- a/src/main/java/com/hbm/qmaw/components/QComponentText.java +++ b/src/main/java/com/hbm/qmaw/components/QComponentText.java @@ -37,7 +37,7 @@ public class QComponentText extends ManualElement { } @Override - public void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY) { + public void render(boolean isMouseOver, int x, int y, int mouseX, int mouseY, GuiQMAW parent) { font.drawString(text, x, y, color); } diff --git a/src/main/java/com/hbm/saveddata/satellites/SatelliteScience.java b/src/main/java/com/hbm/saveddata/satellites/SatelliteScience.java new file mode 100644 index 000000000..fa7d2bcdd --- /dev/null +++ b/src/main/java/com/hbm/saveddata/satellites/SatelliteScience.java @@ -0,0 +1,9 @@ +package com.hbm.saveddata.satellites; + +public class SatelliteScience extends SatelliteBase { + + @Override + public String getType() { + return "SCIENCE_PROBE"; + } +} diff --git a/src/main/java/com/hbm/saveddata/satellites/XSatelliteRegistry.java b/src/main/java/com/hbm/saveddata/satellites/XSatelliteRegistry.java index b06e9f043..8f503f213 100644 --- a/src/main/java/com/hbm/saveddata/satellites/XSatelliteRegistry.java +++ b/src/main/java/com/hbm/saveddata/satellites/XSatelliteRegistry.java @@ -31,6 +31,7 @@ public class XSatelliteRegistry { idToClass.put(9, SatellitePrecisionLaser.class); idToClass.put(10, SatelliteDetector.class); idToClass.put(11, SatelliteRayScan.class); + idToClass.put(12, SatelliteScience.class); // item to sat type mapping registerSatellite(SatelliteMapper.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.SPY)); @@ -45,6 +46,7 @@ public class XSatelliteRegistry { registerSatellite(SatellitePrecisionLaser.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.PRECISION_LASER)); registerSatellite(SatelliteDetector.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.DETECTOR)); registerSatellite(SatelliteRayScan.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.RAY_SCAN)); + registerSatellite(SatelliteScience.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.SCIENCE)); // and all the legacy crap registerSatellite(SatelliteMapper.class, ModItems.sat_mapper); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 39e53a26f..d46f5a465 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5360,7 +5360,7 @@ tile.crane_grabber.desc=Takes items from passing conveyors and places them into tile.crane_inserter.name=Conveyor Inserter tile.crane_inserter.desc=Accepts items from conveyors and places them into containers$Right-click with screwdriver to set input side$Shift-click with screwdriver to set the output side$Click twice to set the opposite side tile.crane_partitioner.name=Acidizer Input Partitioner -tile.crane_partitioner.desc=Receives and stores up to nine Ore Acidizer inputs$and releases them if they match the required input size.$Invalid items are also saved, and need to be extracted from the side. +tile.crane_partitioner.desc=Receives and stores up to 45 Ore Acidizer inputs$and releases them if they match the required input size.$Invalid items are also saved, and need to be extracted from the side. tile.crane_router.name=Conveyor Sorter tile.crane_router.desc=Sorts item based on defined criteria$Sides can be defined as blacklist, whitelist or wildcard$Wildcard sides are only chosen if no other filter matches tile.crane_splitter.name=Conveyor Splitter diff --git a/src/main/resources/assets/hbm/manual/concepts/fluidhandling.json b/src/main/resources/assets/hbm/manual/concepts/fluidhandling.json deleted file mode 100644 index 34132984a..000000000 --- a/src/main/resources/assets/hbm/manual/concepts/fluidhandling.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "Fluid Identification", - "icon": ["hbm:item.fluid_icon", 1, 1], - "title": { - "en_US": "Concept: Fluid Handling" - }, - "content": { - "en_US": "" - } -} diff --git a/src/main/resources/assets/hbm/manual/machine/dieselgen.json b/src/main/resources/assets/hbm/manual/machine/dieselgen.json index aea52ba0e..a72276493 100644 --- a/src/main/resources/assets/hbm/manual/machine/dieselgen.json +++ b/src/main/resources/assets/hbm/manual/machine/dieselgen.json @@ -8,7 +8,7 @@ "ru_RU": "Дизельный генератор" }, "content": { - "en_US": "A simple, early way of making power out of combustible fuels, like [[diesel|Diesel]] or [[gasoline|Gasoline]]. Can only hold 4,000mB of fuel, so explosive barrels cannot be emptied in them, as those carry 10,000mB. Can be stopped using a redstone signal.

See also:
[[Industrial Combustion Engine]]
[[Turbofan]]
[[Combined Cycle Gas Turbine]]", + "en_US": "A simple, early way of making power out of combustible fuels, like [[diesel|Diesel]] or [[gasoline|Gasoline]]. Can be stopped using a redstone signal.

See also:
[[Industrial Combustion Engine]]
[[Turbofan]]
[[Combined Cycle Gas Turbine]]", "zh_CN": "一种简单且早期的燃烧[[柴油|Diesel]]、[[汽油|Gasoline]]等可燃流体的发电手段。只能储存4,000mB燃料,所以并不能在其中放出装有 10,000mB流体的炸药桶中的燃料。收到红石信号时停止工作。

另见:
[[工业内燃机|Industrial Combustion Engine]]
[[涡扇发动机|Turbofan]]
[[联合循环燃气轮机|Combined Cycle Gas Turbine]]", "ru_RU": "Простой ранний способ получения энергии из горючих видов топлива, таких как [[дизель|Diesel]] или [[газолин|Gasoline]]. Генератор вмещает только 4000 mB топлива, поэтому в него нельзя опорожнять взрывные бочки ввиду их содержимого в количестве 10 000 mB дизеля. Может быть остановлен с помощью сигнала красного камня.

Смотрите также:
[[Промышленный двигатель внутреннего сгорания|Industrial Combustion Engine]]
[[Турбовентилятор|Turbofan]]
[[Газовая турбина комбинированного цикла|Combined Cycle Gas Turbine]]" } diff --git a/src/main/resources/assets/hbm/manual/satellite/satellite.json b/src/main/resources/assets/hbm/manual/satellite/satellite.json index 086c7e622..16620bd4f 100644 --- a/src/main/resources/assets/hbm/manual/satellite/satellite.json +++ b/src/main/resources/assets/hbm/manual/satellite/satellite.json @@ -7,7 +7,7 @@ "ru_RU": "Спутник" }, "content": { - "en_US": "Satellites can be launched into earth orbit using a [[Soyuz]] rocket. Satellites communicate with items and blocks on earth using frequencies, so in order to actually use one, it's necessary to set a random frequency in the satellite ID manager, and then copying that ID to another item, for example a satellite chip.

Some satellites can perform minor tasks when linked with certain items, like the [[depth scanning satellite|Depth Scanning Satellite]] enabling the neutrino lens, or the [[xenium resonator satellite|Xenium Resonator Satellite]] connected to a satellite laser designator allowing for short range line of sight teleportation. Satellites however are the most powerful when paired with [[Redstone over Radio]] by linking them to a [[ground station|Satellite Ground Station]].

By using a [[RoR reader|Redstone-over-Radio Reader]], ground stations can receive the RX value, which is received from the connected satellite. Each satellite can only provide one RX value at a time, and the value persists until it changes. The contents of RX depend on what function the satellite has performed prior.

By using a ground station's TX command, commands can be relayed to the connected satellite. Most commands vary between satellite types, however all satellites have a ground target, i.e. the spot on the surface they are aiming at.

The common target commands are as follows:
* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX
* '§egettargetx§r'
* '§egettargetz§r'

See also:
* [[Spy Satellite]]
* [[Depth Scanning Satellite]]
* [[Radar Satellite]]
* [[Asteroid Mining Ship]]
* [[Lunar Mining Ship]]
* [[Orbital Precision Laser]]
* [[Orbital Death Ray]]
* [[Xenium Resonator Satellite]]
* [[Relay Satellite]]
* [[Wideband Radio Emission Detector Satellite]]", - "ru_RU": "Спутники можно запускать на околоземную орбиту с помощью ракеты [[Союз|Soyuz]]. Спутники связываются с предметами и блоками на Земле с помощью частот, поэтому для использования спутника необходимо установить случайную частоту в менеджере ID спутников, а затем скопировать этот ID на другой предмет, например, на спутниковый чип.

Некоторые спутники могут выполнять небольшие задачи при связывании с определёнными предметами — например, [[спутник глубинного сканирования|Depth Scanning Satellite]]] активирует нейтринную линзу, а [[спутник с Зен-резонатором|Xenium Resonator Satellite]], подключённый к спутниковому лазерному целеуказателю, позволяет телепортироваться в пределах прямой видимости на небольшие расстояния. Однако спутники наиболее эффективны в связке с системой [[Редстоун-по-Радио|Redstone over Radio]], если подключить их к [[наземной станции|Satellite Ground Station]].

С помощью [[РпР считывателя|Redstone-over-Radio Reader]] наземные станции могут получать значение RX, поступающее с подключённого спутника. Каждый спутник может передавать только одно значение RX за раз, и оно сохраняется до тех пор, пока не изменится. Содержимое RX зависит от того, какую функцию спутник выполнил перед этим.

Используя команду TX на наземной станции, можно передавать команды подключённому спутнику. Большинство команд различаются в зависимости от типа спутника, однако у всех спутников есть наземная цель — то есть точка на поверхности, на которую они наведены.

Основные команды для управления целью:
* '§esettarget §ex §ez§r' (Пример RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Пример РпР: '§6tx!gettarget§r') — записывает текущие X и Z цели через точку с запятой в RX наземной станции
* '§egettargetx§r'
* '§egettargetz§r'

См. также:
* [[Спутник-шпион|Spy Satellite]]
* [[Спутник глубинного сканирования|Depth Scanning Satellite]]
* [[Радиолокационный спутник|Radar Satellite]]
* [[Астероидный шахтёрский корабль|Asteroid Mining Ship]]
* [[Лунный шахтёрский корабль|Lunar Mining Ship]]
* [[Орбитальный прецизионный лазер|Orbital Precision Laser]]
* [[Орбитальный луч Смерти|Orbital Death Ray]]
* [[Cпутник с Зен-резонатором|Xenium Resonator Satellite]]
* [[Спутник-ретранслятор|Relay Satellite]]
* [[Спутник-детектор широкополосного радиоизлучения|Wideband Radio Emission Detector Satellite]]" + "en_US": "Satellites can be launched into earth orbit using a [[Soyuz]] rocket. Satellites communicate with items and blocks on earth using frequencies, so in order to actually use one, it's necessary to set a random frequency in the satellite ID manager, and then copying that ID to another item, for example a satellite chip.

Some satellites can perform minor tasks when linked with certain items, like the [[depth scanning satellite|Depth Scanning Satellite]] enabling the neutrino lens, or the [[xenium resonator satellite|Xenium Resonator Satellite]] connected to a satellite laser designator allowing for short range line of sight teleportation. Satellites however are the most powerful when paired with [[Redstone over Radio]] by linking them to a [[ground station|Satellite Ground Station]].

By using a [[RoR reader|Redstone-over-Radio Reader]], ground stations can receive the RX value, which is received from the connected satellite. Each satellite can only provide one RX value at a time, and the value persists until it changes. The contents of RX depend on what function the satellite has performed prior.

By using a ground station's TX command, commands can be relayed to the connected satellite. Most commands vary between satellite types, however all satellites have a ground target, i.e. the spot on the surface they are aiming at.

The common target commands are as follows:
* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX
* '§egettargetx§r'
* '§egettargetz§r'

{{Template:Satellites}}", + "ru_RU": "Спутники можно запускать на околоземную орбиту с помощью ракеты [[Союз|Soyuz]]. Спутники связываются с предметами и блоками на Земле с помощью частот, поэтому для использования спутника необходимо установить случайную частоту в менеджере ID спутников, а затем скопировать этот ID на другой предмет, например, на спутниковый чип.

Некоторые спутники могут выполнять небольшие задачи при связывании с определёнными предметами — например, [[спутник глубинного сканирования|Depth Scanning Satellite]]] активирует нейтринную линзу, а [[спутник с Зен-резонатором|Xenium Resonator Satellite]], подключённый к спутниковому лазерному целеуказателю, позволяет телепортироваться в пределах прямой видимости на небольшие расстояния. Однако спутники наиболее эффективны в связке с системой [[Редстоун-по-Радио|Redstone over Radio]], если подключить их к [[наземной станции|Satellite Ground Station]].

С помощью [[РпР считывателя|Redstone-over-Radio Reader]] наземные станции могут получать значение RX, поступающее с подключённого спутника. Каждый спутник может передавать только одно значение RX за раз, и оно сохраняется до тех пор, пока не изменится. Содержимое RX зависит от того, какую функцию спутник выполнил перед этим.

Используя команду TX на наземной станции, можно передавать команды подключённому спутнику. Большинство команд различаются в зависимости от типа спутника, однако у всех спутников есть наземная цель — то есть точка на поверхности, на которую они наведены.

Основные команды для управления целью:
* '§esettarget §ex §ez§r' (Пример RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Пример РпР: '§6tx!gettarget§r') — записывает текущие X и Z цели через точку с запятой в RX наземной станции
* '§egettargetx§r'
* '§egettargetz§r'

{{Template:Satellites}}" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/scansat.json b/src/main/resources/assets/hbm/manual/satellite/scansat.json index a24ce8508..eafb63798 100644 --- a/src/main/resources/assets/hbm/manual/satellite/scansat.json +++ b/src/main/resources/assets/hbm/manual/satellite/scansat.json @@ -9,4 +9,5 @@ "content": { "en_US": "The depth scanning satellite is required for the neutrino lens to work. It does not yet have any special interactions with the ground station.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", "ru_RU": "Спутник глубинного сканирования необходим для работы нейтринной линзы. На данный момент он не имеет никаких особых взаимодействий с наземной станцией.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" + } } diff --git a/src/main/resources/assets/hbm/manual/satellite/spysat.json b/src/main/resources/assets/hbm/manual/satellite/spysat.json index 7e6d48a3c..3ac7ddfb3 100644 --- a/src/main/resources/assets/hbm/manual/satellite/spysat.json +++ b/src/main/resources/assets/hbm/manual/satellite/spysat.json @@ -7,7 +7,7 @@ "ru_RU": "Спутник-шпион" }, "content": { - "en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.

* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.
* '§egetsmog$r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.
* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.

* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.
* '§egetsmog§r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.
* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", "ru_RU": "Спутник-шпион позволяет удаленно вести наблюдение за поверхностью Земли. Из-за отсутствия на данный момент пиксельных дисплеев РпР функция картографирования поверхности пока не работает. Однако их можно использовать для обнаружения прогруженных чанков и выслеживания игроков в небольшом радиусе.

* «§etargetloaded§r» записывает «TRUE» или «FALSE» в RX в зависимости от того, прогружен ли чанк, на который наведен спутник.
* «§egetsmog$r» записывает числовое значение (округленное в большую сторону) загрязнения сажей в текущей целевой позиции в RX.
* «§espotplayers§r» обнаруживает игроков на поверхности в радиусе 250 блоков и записывает все имена через точку с запятой в RX.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/template_satellites.json b/src/main/resources/assets/hbm/manual/satellite/template_satellites.json new file mode 100644 index 000000000..29d1cc60e --- /dev/null +++ b/src/main/resources/assets/hbm/manual/satellite/template_satellites.json @@ -0,0 +1,13 @@ +{ + "name": "Template:Satellites", + "icon": ["hbm:item.nothing"], + "trigger": [], + "noindex": true, + "title": { + "en_US": "Template:Satellites" + }, + "content": { + "en_US": "See also:
* [[Spy Satellite]]
* [[Depth Scanning Satellite]]
* [[Radar Satellite]]
* [[Asteroid Mining Ship]]
* [[Lunar Mining Ship]]
* [[Orbital Precision Laser]]
* [[Orbital Death Ray]]
* [[Xenium Resonator Satellite]]
* [[Relay Satellite]]
* [[Wideband Radio Emission Detector Satellite]]
* [[Narrowband Emission Scanning Satellite]]", + "ru_RU": "

См. также:
* [[Спутник-шпион|Spy Satellite]]
* [[Спутник глубинного сканирования|Depth Scanning Satellite]]
* [[Радиолокационный спутник|Radar Satellite]]
* [[Астероидный шахтёрский корабль|Asteroid Mining Ship]]
* [[Лунный шахтёрский корабль|Lunar Mining Ship]]
* [[Орбитальный прецизионный лазер|Orbital Precision Laser]]
* [[Орбитальный луч Смерти|Orbital Death Ray]]
* [[Cпутник с Зен-резонатором|Xenium Resonator Satellite]]
* [[Спутник-ретранслятор|Relay Satellite]]
* [[Спутник-детектор широкополосного радиоизлучения|Wideband Radio Emission Detector Satellite]]
* [[Narrowband Emission Scanning Satellite]]" + } +} diff --git a/src/main/resources/assets/hbm/textures/items/satellite.science.png b/src/main/resources/assets/hbm/textures/items/satellite.science.png new file mode 100644 index 0000000000000000000000000000000000000000..dd54d692b517a5169139a10aa4f2fe5ab2e4f1f8 GIT binary patch literal 429 zcmV;e0aE^nP) z_|&A9Qw>z#M8rxdCL(SsaM2`+A|@hcW?n27rB3Wqft1oZHIY(UM8w7z%w{u8CX?Fy z*11j!aU92(&*vD8M(Fi=2*a?k`x=OdwbsnctdwFQ1P4LDK@gP2bT92fDTQvg3#~Q! z{XPbR0mjP>?!5l4)^*7`)z(?rz(!) z7@p^$Fv+qE#u$v38|<<#*sZG)|2gy7oBzV8R!-9tT5IHa4&V1NolYAsRlsTz7c)O5 z3dOPt{*cclLl*#yF)+rI#PpWIc3QCAc8RO7hr^*IrL0xn@3z?geAoCagb;lEp8voB XiYyfFLITM)00000NkvXXu0mjfQ?$FL literal 0 HcmV?d00001