diff --git a/changelog b/changelog index 7ac809e1b..e80502e33 100644 --- a/changelog +++ b/changelog @@ -11,7 +11,7 @@ * Filters can be set using items or RoR commands * Requests can be configured to take as much as possible, to only take full stacks, or to only take full requests * In combination with assembler recipe switching, using RoR logic, this means that on-demand recipe automation is now possible - * The budget didn't cover actually testing this so uh, you go figure it out + * Still in testing, there's no recpes for any of the parts yet ## Changed * Updated chinese localization @@ -83,3 +83,5 @@ * Fixed RoR gauge not using SI suffixes on values below 0 * Fixed AUTOCAL units not closing their GUI when the unit is destroyed * Fixed AUTOCAL's $buffer$ substitution not working +* Fixed meteorite sword localization still being broken +* Fixed missing localization on the FM radio diff --git a/src/main/java/com/hbm/entity/mob/EntityMaskMan.java b/src/main/java/com/hbm/entity/mob/EntityMaskMan.java index 64e1658c0..c29a6ce1d 100644 --- a/src/main/java/com/hbm/entity/mob/EntityMaskMan.java +++ b/src/main/java/com/hbm/entity/mob/EntityMaskMan.java @@ -92,25 +92,18 @@ public class EntityMaskMan extends EntityMob implements IBossDisplayData, IRadia } @Override - public void onDeath(DamageSource p_70645_1_) { - super.onDeath(p_70645_1_); + public void onDeath(DamageSource source) { + super.onDeath(source); - List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(50, 50, 50)); + List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(100, 100, 100)); for(EntityPlayer player : players) { player.triggerAchievement(MainRegistry.bossMaskman); } } - @Override - public boolean isAIEnabled() { - return true; - } - - @Override - protected boolean canDespawn() { - return false; - } + @Override public boolean isAIEnabled() { return true; } + @Override protected boolean canDespawn() { return false; } @Override protected void dropFewItems(boolean bool, int i) { diff --git a/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java b/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java index 3d451b9d5..f0dca734a 100644 --- a/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java +++ b/src/main/java/com/hbm/entity/mob/ai/EntityAIMaskmanMinigun.java @@ -1,7 +1,7 @@ package com.hbm.entity.mob.ai; -import com.hbm.entity.projectile.EntityBulletBaseNT; -import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.items.weapon.sedna.factory.XFactory762mm; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLivingBase; @@ -51,11 +51,9 @@ public class EntityAIMaskmanMinigun extends EntityAIBase { if(timer <= 0) { timer = delay; - EntityBulletBaseNT bullet = new EntityBulletBaseNT(owner.worldObj, BulletConfigSyncingUtil.MASKMAN_BULLET, owner, target, 1.0F, 0); + EntityBulletBaseMK4 bullet = new EntityBulletBaseMK4(this.owner, XFactory762mm.r762_fmj, 5F, 0.075F, -1.5, -1.5, 0); owner.worldObj.spawnEntityInWorld(bullet); owner.playSound("hbm:weapon.calShoot", 1.0F, 1.0F); } - - this.owner.rotationYaw = this.owner.rotationYawHead; } } diff --git a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java index bf9cddaa0..893eaa866 100644 --- a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java @@ -16,7 +16,6 @@ public class BulletConfigSyncingUtil { public static int TURBINE = i++; - public static int MASKMAN_BULLET = i++; public static int MASKMAN_ORB = i++; public static int MASKMAN_BOLT = i++; public static int MASKMAN_ROCKET = i++; @@ -32,7 +31,6 @@ public class BulletConfigSyncingUtil { configSet.put(TURBINE, GunEnergyFactory.getTurbineConfig()); - configSet.put(MASKMAN_BULLET, GunNPCFactory.getMaskmanBullet()); configSet.put(MASKMAN_ORB, GunNPCFactory.getMaskmanOrb()); configSet.put(MASKMAN_BOLT, GunNPCFactory.getMaskmanBolt()); configSet.put(MASKMAN_ROCKET, GunNPCFactory.getMaskmanRocket()); diff --git a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java index d6ffd12f6..995625114 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java @@ -93,21 +93,6 @@ public class GunNPCFactory { return bullet; } - public static BulletConfiguration getMaskmanBullet() { - - BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); - - bullet.ammo = new ComparableStack(ModItems.coin_maskman); - bullet.spread = 0.0F; - bullet.dmgMin = 5; - bullet.dmgMax = 10; - bullet.leadChance = 15; - bullet.style = BulletConfiguration.STYLE_FLECHETTE; - bullet.vPFX = "bluedust"; - - return bullet; - } - public static BulletConfiguration getMaskmanTracer() { BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); diff --git a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java index 7c3184bc4..299785a2a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRadioRec.java @@ -65,7 +65,7 @@ public class GUIRadioRec extends GuiScreen { private void drawGuiContainerForegroundLayer(int x, int y) { - String name = I18nUtil.resolveKey("container.radio"); + String name = I18nUtil.resolveKey("container.radiorec"); this.fontRendererObj.drawString(name, this.guiLeft + this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, this.guiTop + 6, 4210752); if(guiLeft + 137 <= x && guiLeft + 137 + 18 > x && guiTop + 17 < y && guiTop + 17 + 18 >= y) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java index 3344dec11..b27f2e7bb 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRadioAUTOCAL.java @@ -234,9 +234,17 @@ public class GUIScreenRadioAUTOCAL extends GuiScreen { "", "Example: `/ntmserver set AUTOCAL_MAX_CLOCK 10` -> Sets the max clock speed to 10.", "", + "## About MS-ES v1.1", + "MS-ES v1.1 (or MS-ES1 FEID, \"First Extended Instruction Set\") is the second released version of the AUTOCAL's script interpreter. It features various useful additions such as text splitting, substrings, a stack-based buffer and world time grabbing. The stack for example allows for a call stack, which means that functions that were jumped to can now be nested without having to save the most recent jumping points in dedicated variables. The string split and substring operations now allow for reversing concat operations and potentially grabbing individual coordinates out of combined coordinate strings. A single RoR send operation can now send serialized data (i.e. multiple values in a single text string) which can now finally be de-serialized again.", + "", + "Programs witten in MS-ES1 are largely compatible with MS-ES1.1 interpreters, however, MS-ES1.1 now imposes a character limit of 256 on buffered values.", + "", "## About the Buffer", "The buffer is a single \"slot\" of information that can be used for many commands. Some commands produce an output which is saved to the buffer, some commands modify the contents of the buffer, and some commands use the buffer's contents. The buffer's contents can also be saved permanently as a named variable, and named variables can be written back into the buffer again if needed. The buffer persists as long as the AUTOCAL unit is running, should it restart or shut down, the buffer's contents are lost.", "", + "## About the Stack (v1.1)", + "The stack functions similar to the buffer, as in there is only one single stack that can be accessed per AUTOCAL unit, and it can save arbitrary text data. The difference being, while the buffer can only store one value, the stack can store a list of up to 256 values. Values on a stack follow the last-in-first-out principle, i.e. the most recently added values are read first. The stack supports `push` (adding new elements), `pop` (reading and removing elements) and `peek` (reading but not removing elements).", + "", "## About Variables", "MS-ES1 allows named variables to be saved for later use. There is no limit to how many variables can be saved. All variables are text (\"Strings\"), however depending on the command and context, that text may be interpreted as a number (both full and decimal). Variables, much like the buffer, are also stored as long as the program is running, if the AUTOCAL unit shuts down, all stored variables are lost.", "", @@ -325,6 +333,15 @@ public class GUIScreenRadioAUTOCAL extends GuiScreen { "", "-> Will buffer the value `Horseshoe` and then save it to the variable called \"item\".", "", + "### push (v1.1)", + "`push [value]` will add the supplied value to the stack. If no value is supplied, it will write the buffer's contents to the stack instead. Do note that the stack can only hold up to 256 values! Supports variable substitution!", + "", + "### pop (v1.1)", + "`pop` will remove the most recently added value from the stack and write it to the buffer.", + "", + "### peek (v1.1)", + "`peek` will write the most recently added value from the stack to the buffer, but without removing it from the stack like `pop` would.", + "", "### eval", "`eval [statement]` will evaluate the supplied statement as a mathematical expression. In short, anything NTM's calculator can make sense of (the one you open with N by default), this function can do the same. The statement is optional, if no statement is supplied, then it will try to use the buffer's contents as the statement. `eval` produces **decimal** values and not whole number **integers**, so for use in RoR signals, the output needs to be rounded! The result of the calculation is then saved to the buffer. Supports variable substitution!", "", @@ -387,6 +404,54 @@ public class GUIScreenRadioAUTOCAL extends GuiScreen { "### leb", "`leb ` - less than or equal buffer.", "", + "### splitter (v1.1)", + "`splitter ` sets the splitter character (or text) which is used for splitting operations. This value exists once per AUTOCAL, similar to the clockspeed. By default, the splitter is set to `;`. Supports variable substitution!", + "", + "### split (v1.1)", + "`split ` will split the buffer's contents, grab the fragment with the desired index, and write its contents to the buffer.", + "", + "Example:", + "`buffer cats;and;dogs`", + "`split 3`", + "", + "-> Will buffer the value of the third fragment, being `dogs`.", + "", + "### splitcount (v1.1)", + "`splitcount` will split the buffer's contents, count the number of fragments created, and write that value to the buffer.", + "", + "Example:", + "`buffer cats;and;dogs;and;birds`", + "`splitcount`", + "", + "-> Will buffer the number of fragments, being `5`.", + "", + "### length (v1.1)", + "`length` will count the number of characters in the buffer's stored text, and write that value to the buffer.", + "", + "Example:", + "`buffer cats and dogs`", + "`lenght`", + "", + "-> Will buffer the number of characters in `cats and dogs`, being `13`.", + "", + "### first (v1.1)", + "`first ` will grab the first x characters from the buffer and write them to the buffer. This is a substring operation that always starts at the first letter.", + "", + "Example:", + "`buffer cats and dogs`", + "`first 4`", + "", + "-> Will buffer the first four characters of the buffer, `cats`.", + "", + "### last (v1.1)", + "`last ` will grab the last x characters from the buffer and write them to the buffer. This is a substring operation that always ends at the last letter.", + "", + "Example:", + "`buffer cats and dogs`", + "`last 4`", + "", + "-> Will buffer the last four characters of the buffer, `dogs`.", + "", "### send", "`send ` will send a Redstone-over-Radio signal over the supplied channel, with the signal's value being the current buffer's value. Sending repeatedly over the same channel requires waiting for a full game tick, so using `endtick` after sending is advised. Supports variable substitution!", "", @@ -412,6 +477,12 @@ public class GUIScreenRadioAUTOCAL extends GuiScreen { "", "-> Will take the signal from the RoR channel \"input\", multiply it by 100, and send that value on the channel \"output\".", "", + "### poll (v1.1)", + "`poll ` will listen to the supplied RoR channel and write the signal to the buffer. Unlike `listen`, it will only detect signals from the last tick. Supports variable substitution!", + "", + "### worldtime (v1.1)", + "`worldtime` will save the amount of ticks since world creation to the buffer. If the result is saved to a variable, it can be compared later, allowing for precise and clockspeed-agnostic timers.", + "", "## Advanced", "", "### Conditional Branches", diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticStorageBase.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticStorageBase.java index c9dca5229..3e4ab8c74 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticStorageBase.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumaticStorageBase.java @@ -86,7 +86,7 @@ public abstract class TileEntityPneumaticStorageBase extends TileEntityMachineBa } if(this.compair.getFill() > 0) { - int consumption = (int) Math.ceil(this.compair.getFill() * 17 / this.compair.getMaxFill()) + 3; + int consumption = (int) Math.ceil(this.compair.getFill() * 9 / this.compair.getMaxFill()) + 1; this.compair.setFill(Math.max(this.compair.getFill() - consumption, 0)); } diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java index f0913de23..e2e0165ce 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageExporter.java @@ -40,6 +40,8 @@ public class TileEntityPneumoStorageExporter extends TileEntityPneumaticMachineB public static final int MODE_FULL_REQUEST = 2; public boolean lastRedstone = false; + + public int[] SLOT_ACCESS = new int[] {9, 10, 11, 12, 13, 14, 15, 16, 17}; public TileEntityPneumoStorageExporter() { super(18); @@ -50,6 +52,9 @@ public class TileEntityPneumoStorageExporter extends TileEntityPneumaticMachineB return "container.pneumoStorageExporter"; } + @Override public boolean canExtractItem(int slot, ItemStack itemStack, int side) { return slot >= 9; } + @Override public int[] getAccessibleSlotsFromSide(int side) { return SLOT_ACCESS; } + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 1a30570d7..dc5e332c1 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3287,27 +3287,27 @@ item.meteor_remote.name=Meteorite Remote item.meteorite_sword.name=Meteorite Sword item.meteorite_sword.desc=Forged from a fallen star$Sharper than most terrestrial blades item.meteorite_sword_seared.name=Meteorite Sword (Seared) -item.meteorite_sword.seared.desc=Fire strengthens the blade$Making it even more powerful +item.meteorite_sword_seared.desc=Fire strengthens the blade$Making it even more powerful item.meteorite_sword_reforged.name=Meteorite Sword (Reforged) -item.meteorite_sword.reforged.desc=The sword has been reforged$To rectify past imperfections +item.meteorite_sword_reforged.desc=The sword has been reforged$To rectify past imperfections item.meteorite_sword_hardened.name=Meteorite Sword (Hardened) -item.meteorite_sword.hardened.desc=Extremely high pressure has been used$To harden the blade further +item.meteorite_sword_hardened.desc=Extremely high pressure has been used$To harden the blade further item.meteorite_sword_alloyed.name=Meteorite Sword (Alloyed) -item.meteorite_sword.alloyed.desc=Cobalt fills the fissures$Strengthening the sword +item.meteorite_sword_alloyed.desc=Cobalt fills the fissures$Strengthening the sword item.meteorite_sword_machined.name=Meteorite Sword (Machined) -item.meteorite_sword.machined.desc=Advanced machinery was used$To refine the blade even more +item.meteorite_sword_machined.desc=Advanced machinery was used$To refine the blade even more item.meteorite_sword_treated.name=Meteorite Sword (Treated) -item.meteorite_sword.treated.desc=Chemicals have been applied$Making the sword more powerful +item.meteorite_sword_treated.desc=Chemicals have been applied$Making the sword more powerful item.meteorite_sword_etched.name=Meteorite Sword (Etched) -item.meteorite_sword.etched.desc=Acids clean the material$To make this the perfect sword +item.meteorite_sword_etched.desc=Acids clean the material$To make this the perfect sword item.meteorite_sword_bred.name=Meteorite Sword (Bred) -item.meteorite_sword.bred.desc=Immense heat and radiation$Compress the material +item.meteorite_sword_bred.desc=Immense heat and radiation$Compress the material item.meteorite_sword_irradiated.name=Meteorite Sword (Irradiated) -item.meteorite_sword.irradiated.desc=The power of the Atom$Gives the sword might +item.meteorite_sword_irradiated.desc=The power of the Atom$Gives the sword might item.meteorite_sword_fused.name=Meteorite Sword (Fused) -item.meteorite_sword.fused.desc=This blade has met$With the forces of the stars +item.meteorite_sword_fused.desc=This blade has met$With the forces of the stars item.meteorite_sword_baleful.name=Meteorite Sword (Baleful) -item.meteorite_sword.baleful.desc=This sword has met temperatures$Far beyond what normal material can endure +item.meteorite_sword_baleful.desc=This sword has met temperatures$Far beyond what normal material can endure item.mike_cooling_unit.name=Deuterium Cooling Unit item.mike_core.name=Uranium Coated Deuterium Tank item.mike_deut.name=Deuterium Tank diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png new file mode 100644 index 000000000..a68dda7ab Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_supercomputer.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png index 4510d8219..eb981107d 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_breeder.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png index d26b84bdb..b1da9e774 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png index 48b84ef87..edd94f252 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_torus.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png b/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png index 0095b0695..23f523d4a 100644 Binary files a/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png and b/src/main/resources/assets/hbm/textures/models/machines/supercomputer.png differ