Merge branch 'HbmMods:master' into master
1
.github/workflows/build.yml
vendored
@ -12,6 +12,7 @@ name: Java CI with Gradle
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
34
changelog
@ -1,23 +1,17 @@
|
||||
## Added
|
||||
* QMAW (quick manual and wiki)
|
||||
* It's a simple ingame manual that can be found by pressing F1 on items (like the WIAJ presentations)
|
||||
* Supports text and links and not much else
|
||||
* Easy to make entries for, the system scans `assets/manual` for valid `.json` format files
|
||||
* Should also work in resource packs (no recent tests for that, not going to make promises)
|
||||
* Still WIP, many new info pages are yet to be made
|
||||
* `/ntmlocate`
|
||||
* Finds structures
|
||||
* Only works on the new component structures, the old crusty ones like the factors and powerplant aren't supported
|
||||
|
||||
## Changed
|
||||
* Updated chinese and russian localization
|
||||
* All the never completed missile parts (20/20 fuselage, 20 warhead, 10 and 15 tec kerosene thrusters) have been removed
|
||||
* The electric arc furnace now scrapes the vanilla furnace recipe list on server start in addition to postinit, making sure recipes added during postinit after NTM loads (like Thermal's ingots) are covered too
|
||||
* The shredder's sound will now start immediately when processing instead of with random delay
|
||||
* The assembly machine can now make nuclear waste into barrels
|
||||
* Capacitors now have OpenComputers integration
|
||||
* QMAW now has buttons for returning to previously viewed pages
|
||||
* QMAW file detection now includes subfolders to `manual`
|
||||
* OpenComputers integration for the ZIRNOX should now return values in °C and bar instead of unexplained weird internal units
|
||||
* The sodium and strontium autogen ingots now have their correct hazard tags
|
||||
* Pattern matchers, like the one used on the automatic crafting table, no longer care about NBT data of an item
|
||||
* This means that RBMK fuel rods can now be automatically disassembled without the depletion number having to be a 100% match
|
||||
* Due to the way the RBMK uncrafting handler works, a single autocrafter now correctly supports RBMK fuel of one type of any depletion level, yielding the correct recycling pellets
|
||||
|
||||
## Fixed
|
||||
* Fixed GT6 compatibility watz pellets crashing due to misconfigured recipes
|
||||
* Removed failed attempt at fixing the gun desync dupe which made things worse
|
||||
* Fixed a potential crash regarding structure blocks
|
||||
* Fixed QMAW not working at all
|
||||
* Potentially fixed a bug where proxy tile entities would reference unloaded core tile entities which would cause bizarre item voiding/duping issues in rare cases
|
||||
* Fixed fusion reactor automation being able to remove items other than the breeding output slot
|
||||
* Fixed chunkloading transport drones getting stuck due to off-by-one rounding errors
|
||||
* Fixed shift-click handling on the electric arc furnace not working with upgrades, and putting electrodes in the wrong slot
|
||||
* Fixed issue with the load order where custom fluids wouldn't work properly for fluid loading/unloading and in custom recipes
|
||||
* Fixed balefire bomb not rendering the egg when fully loaded
|
||||
@ -96,12 +96,16 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
|
||||
|
||||
TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z);
|
||||
if(world.isRemote) {
|
||||
TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z);
|
||||
plushie.squishTimer = 11;
|
||||
return true;
|
||||
} else {
|
||||
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.squeakyToy", 0.25F, 1F);
|
||||
if(plushie.type == PlushieType.HUNDUN) {
|
||||
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.hunduns_magnificent_howl", 100F, 1F);
|
||||
} else {
|
||||
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.squeakyToy", 0.25F, 1F);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -155,7 +159,7 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti
|
||||
NONE( "NONE", null),
|
||||
YOMI( "Yomi", "Hi! Can I be your rabbit friend?"),
|
||||
NUMBERNINE( "Number Nine", "None of y'all deserve coal."),
|
||||
POOH( "Winnie the Pooh", "Beloved children's character with no malicious intent.");
|
||||
HUNDUN( "Hundun", "混沌");
|
||||
|
||||
public String label;
|
||||
public String inscription;
|
||||
|
||||
@ -1,14 +0,0 @@
|
||||
package com.hbm.calc;
|
||||
|
||||
public class EasyLocation {
|
||||
|
||||
public double posX;
|
||||
public double posY;
|
||||
public double posZ;
|
||||
|
||||
public EasyLocation(double x, double y, double z) {
|
||||
posX = x;
|
||||
posY = y;
|
||||
posZ = z;
|
||||
}
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
package com.hbm.calc;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class Location {
|
||||
|
||||
public int x;
|
||||
public int y;
|
||||
public int z;
|
||||
public World world;
|
||||
|
||||
public Location(World world, int x, int y, int z) {
|
||||
this.world = world;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public Location add(int xa, int ya, int za) {
|
||||
return new Location(world, x + xa, y + ya, z + za);
|
||||
}
|
||||
|
||||
public Location add(ForgeDirection dir) {
|
||||
return add(dir.offsetX, dir.offsetY, dir.offsetZ);
|
||||
}
|
||||
|
||||
public TileEntity getTileEntity() {
|
||||
return world.getTileEntity(x, y, z);
|
||||
}
|
||||
|
||||
}
|
||||
@ -200,7 +200,7 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory,
|
||||
}
|
||||
|
||||
// This is the lowest padding that worked with my drone waypoint path. if they stop getting loaded crank up paddingSize
|
||||
for (ChunkCoordIntPair chunk : ChunkShapeHelper.getChunksAlongLineSegment((int) this.posX, (int) this.posZ, (int) (this.posX + this.motionX), (int) (this.posZ + this.motionZ), 4)){
|
||||
for (ChunkCoordIntPair chunk : ChunkShapeHelper.getChunksAlongLineSegment((int) Math.floor(this.posX), (int) Math.floor(this.posZ), (int) Math.floor(this.posX + this.motionX), (int) Math.floor(this.posZ + this.motionZ), 8)){
|
||||
ForgeChunkManager.forceChunk(loaderTicket, chunk);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,8 +10,8 @@ import com.hbm.main.MainRegistry;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityBalefire extends EntityExplosionChunkloading {
|
||||
|
||||
public class EntityBalefire extends EntityExplosionChunkloading {
|
||||
|
||||
public int age = 0;
|
||||
public int destructionRange = 0;
|
||||
public ExplosionBalefire exp;
|
||||
@ -24,13 +24,11 @@ public class EntityBalefire extends EntityExplosionChunkloading {
|
||||
destructionRange = nbt.getInteger("destructionRange");
|
||||
speed = nbt.getInteger("speed");
|
||||
did = nbt.getBoolean("did");
|
||||
|
||||
|
||||
exp = new ExplosionBalefire((int)this.posX, (int)this.posY, (int)this.posZ, this.worldObj, this.destructionRange);
|
||||
|
||||
exp = new ExplosionBalefire((int) this.posX, (int) this.posY, (int) this.posZ, this.worldObj, this.destructionRange);
|
||||
exp.readFromNbt(nbt, "exp_");
|
||||
|
||||
this.did = true;
|
||||
|
||||
|
||||
this.did = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -39,10 +37,10 @@ public class EntityBalefire extends EntityExplosionChunkloading {
|
||||
nbt.setInteger("destructionRange", destructionRange);
|
||||
nbt.setInteger("speed", speed);
|
||||
nbt.setBoolean("did", did);
|
||||
|
||||
|
||||
if(exp != null)
|
||||
exp.saveToNbt(nbt, "exp_");
|
||||
|
||||
|
||||
}
|
||||
|
||||
public EntityBalefire(World p_i1582_1_) {
|
||||
@ -53,7 +51,8 @@ public class EntityBalefire extends EntityExplosionChunkloading {
|
||||
public void onUpdate() {
|
||||
super.onUpdate();
|
||||
|
||||
if(!worldObj.isRemote) loadChunk((int) Math.floor(posX / 16D), (int) Math.floor(posZ / 16D));
|
||||
if(!worldObj.isRemote)
|
||||
loadChunk((int) Math.floor(posX / 16D), (int) Math.floor(posZ / 16D));
|
||||
|
||||
if(!this.did) {
|
||||
if(GeneralConfig.enableExtendedLogging && !worldObj.isRemote)
|
||||
|
||||
@ -454,7 +454,7 @@ public class OreDictManager {
|
||||
* HAZARDS, MISC
|
||||
*/
|
||||
LI .hydro(1F) .ingot(lithium) .dustSmall(powder_lithium_tiny) .dust(powder_lithium) .block(block_lithium) .ore(ore_gneiss_lithium);
|
||||
NA .hydro(1F) .dust(powder_sodium);
|
||||
NA .hydro(1F) .hazIngot() .dust(powder_sodium);
|
||||
|
||||
/*
|
||||
* PHOSPHORUS
|
||||
@ -494,7 +494,7 @@ public class OreDictManager {
|
||||
/*
|
||||
* FISSION FRAGMENTS
|
||||
*/
|
||||
SR .hot(1F) .hydro(1F) .dust(powder_strontium);
|
||||
SR .hot(1F) .hydro(1F) .hazIngot() .dust(powder_strontium);
|
||||
SR90 .rad(HazardRegistry.sr90) .hot(1F) .hydro(1F) .dustSmall(powder_sr90_tiny) .dust(powder_sr90) .ingot(ingot_sr90) .billet(billet_sr90) .nugget(nugget_sr90);
|
||||
I131 .rad(HazardRegistry.i131) .hot(1F) .dustSmall(powder_i131_tiny) .dust(powder_i131);
|
||||
XE135 .rad(HazardRegistry.xe135) .hot(10F) .dustSmall(powder_xe135_tiny) .dust(powder_xe135);
|
||||
@ -912,6 +912,21 @@ public class OreDictManager {
|
||||
for(Block b : blocks) registerStack(tag, new ItemStack(b));
|
||||
return this;
|
||||
}
|
||||
|
||||
public DictFrame hazIngot() {
|
||||
hazMult = HazardRegistry.ingot;
|
||||
return autoRegHazard(INGOT);
|
||||
}
|
||||
|
||||
// TODO: rethink this. currently, keys are only registered on-demand if the dict frame has a valid entry, even though we can maximize compatibility
|
||||
// by simply registereing all known shapes in the haz reg, whether it exists or not
|
||||
public DictFrame autoRegHazard(MaterialShapes shape) {
|
||||
String tag = shape.name();
|
||||
for(String mat : mats) {
|
||||
registerHazards(hazards, hazMult, tag + mat);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public static void registerHazards(List<HazardEntry> hazards, float hazMult, String dictKey) {
|
||||
|
||||
|
||||
@ -61,9 +61,9 @@ public class ContainerMachineArcFurnaceLarge extends Container {
|
||||
if(rStack.getItem() instanceof IBatteryItem || rStack.getItem() == ModItems.battery_creative) {
|
||||
if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 3, 4, false)) return null;
|
||||
} else if(rStack.getItem() == ModItems.arc_electrode) {
|
||||
if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null;
|
||||
} else if(rStack.getItem() instanceof ItemMachineUpgrade) {
|
||||
if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 0, 3, false)) return null;
|
||||
} else if(rStack.getItem() instanceof ItemMachineUpgrade) {
|
||||
if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 4, 5, false)) return null;
|
||||
} else {
|
||||
if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 5, 25, false)) return null;
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@ public class LoadingScreenRendererNT extends LoadingScreenRenderer {
|
||||
}
|
||||
|
||||
private String chooseTip() {
|
||||
if(HTTPHandler.tipOfTheDay.isEmpty()) return "null";
|
||||
if(HTTPHandler.tipOfTheDay.isEmpty()) return "Explore! There's tons of free stuff to find.";
|
||||
return HTTPHandler.tipOfTheDay.get(new Random().nextInt(HTTPHandler.tipOfTheDay.size()));
|
||||
}
|
||||
|
||||
|
||||
@ -40,6 +40,7 @@ import com.hbm.lib.HbmWorld;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.potion.HbmPotion;
|
||||
import com.hbm.qmaw.QMAWLoader;
|
||||
import com.hbm.saveddata.satellites.Satellite;
|
||||
import com.hbm.tileentity.TileMappings;
|
||||
import com.hbm.tileentity.bomb.TileEntityLaunchPadBase;
|
||||
@ -253,6 +254,8 @@ public class MainRegistry {
|
||||
@EventHandler
|
||||
public void PreLoad(FMLPreInitializationEvent PreEvent) {
|
||||
CrashHelper.init();
|
||||
|
||||
QMAWLoader.registerModFileURL(FMLCommonHandler.instance().findContainerFor(RefStrings.MODID).getSource());
|
||||
|
||||
startupTime = System.currentTimeMillis();
|
||||
configDir = PreEvent.getModConfigurationDirectory();
|
||||
@ -848,6 +851,12 @@ public class MainRegistry {
|
||||
|
||||
@EventHandler
|
||||
public static void PostLoad(FMLPostInitializationEvent PostEvent) {
|
||||
// to make sure that foreign registered fluids are accounted for,
|
||||
// even when the reload listener is registered too late due to load order
|
||||
// IMPORTANT: fluids have to load before recipes. weird shit happens if not.
|
||||
Fluids.reloadFluids();
|
||||
FluidContainerRegistry.register();
|
||||
|
||||
MagicRecipes.register();
|
||||
LemegetonRecipes.register();
|
||||
SILEXRecipes.register();
|
||||
@ -876,7 +885,6 @@ public class MainRegistry {
|
||||
ArmorUtil.register();
|
||||
HazmatRegistry.registerHazmats();
|
||||
DamageResistanceHandler.init();
|
||||
FluidContainerRegistry.register();
|
||||
BlockToolConversion.registerRecipes();
|
||||
AchievementHandler.register();
|
||||
|
||||
@ -909,10 +917,6 @@ public class MainRegistry {
|
||||
SuicideThreadDump.register();
|
||||
CommandReloadClient.register();
|
||||
|
||||
// to make sure that foreign registered fluids are accounted for,
|
||||
// even when the reload listener is registered too late due to load order
|
||||
Fluids.reloadFluids();
|
||||
|
||||
//ExplosionTests.runTest();
|
||||
}
|
||||
|
||||
|
||||
@ -114,6 +114,8 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
||||
import net.minecraftforge.client.event.sound.PlaySoundEvent17;
|
||||
import net.minecraftforge.common.ForgeHooks;
|
||||
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
@ -753,6 +755,9 @@ public class ModEventHandlerClient {
|
||||
|
||||
try {
|
||||
QuickManualAndWiki qmaw = QMAWLoader.triggers.get(comp);
|
||||
if(qmaw == null) {
|
||||
qmaw = QMAWLoader.triggers.get(new ComparableStack(comp.item, 1, OreDictionary.WILDCARD_VALUE));
|
||||
}
|
||||
if(qmaw != null) {
|
||||
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("qmaw.tab", Keyboard.getKeyName(HbmKeybinds.qmaw.getKeyCode())));
|
||||
lastQMAW = qmaw;
|
||||
|
||||
@ -139,8 +139,8 @@ public class ModulePatternMatcher {
|
||||
}
|
||||
|
||||
switch(mode) {
|
||||
case MODE_EXACT: return input.isItemEqual(filter) && ItemStack.areItemStackTagsEqual(input, filter);
|
||||
case MODE_WILDCARD: return input.getItem() == filter.getItem() && ItemStack.areItemStackTagsEqual(input, filter);
|
||||
case MODE_EXACT: return input.isItemEqual(filter)/* && ItemStack.areItemStackTagsEqual(input, filter)*/;
|
||||
case MODE_WILDCARD: return input.getItem() == filter.getItem()/* && ItemStack.areItemStackTagsEqual(input, filter)*/;
|
||||
case MODE_BEDROCK:
|
||||
if(input.getItem() != filter.getItem()) return false;
|
||||
if(!(input.getItem() instanceof ItemBedrockOreNew)) return false;
|
||||
|
||||
@ -3,13 +3,16 @@ package com.hbm.qmaw;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.qmaw.components.*;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.resources.LanguageManager;
|
||||
@ -22,8 +25,12 @@ public class GuiQMAW extends GuiScreen {
|
||||
protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_wiki.png");
|
||||
|
||||
public String title;
|
||||
public String qmawID;
|
||||
public ItemStack icon;
|
||||
public List<List<ManualElement>> lines = new ArrayList();
|
||||
/** History for returning via button */
|
||||
public List<String> back = new ArrayList();
|
||||
public List<String> forward = new ArrayList();
|
||||
|
||||
protected int xSize = 340;
|
||||
protected int ySize = 224;
|
||||
@ -38,6 +45,7 @@ public class GuiQMAW extends GuiScreen {
|
||||
public static final String EN_US = "en_US";
|
||||
|
||||
public GuiQMAW(QuickManualAndWiki qmaw) {
|
||||
qmawID = qmaw.name;
|
||||
parseQMAW(qmaw);
|
||||
}
|
||||
|
||||
@ -163,6 +171,43 @@ public class GuiQMAW extends GuiScreen {
|
||||
this.lastClickX = x;
|
||||
this.lastClickY = y;
|
||||
}
|
||||
|
||||
if(guiLeft + 3 <= x && guiLeft + 3 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) back();
|
||||
if(guiLeft + 21 <= x && guiLeft + 21 + 18 > x && guiTop + 3 < y && guiTop + 3 + 18 >= y) forward();
|
||||
}
|
||||
|
||||
public void back() {
|
||||
if(this.back.isEmpty()) return;
|
||||
|
||||
String prev = back.get(back.size() - 1);
|
||||
|
||||
QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(prev);
|
||||
if(qmaw != null) {
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
GuiQMAW screen = new GuiQMAW(qmaw);
|
||||
screen.back.addAll(back);
|
||||
screen.back.remove(screen.back.size() - 1);
|
||||
screen.forward.addAll(forward);
|
||||
screen.forward.add(qmawID);
|
||||
FMLCommonHandler.instance().showGuiScreen(screen);
|
||||
}
|
||||
}
|
||||
|
||||
public void forward() {
|
||||
if(this.forward.isEmpty()) return;
|
||||
|
||||
String next = forward.get(forward.size() - 1);
|
||||
|
||||
QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(next);
|
||||
if(qmaw != null) {
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
GuiQMAW screen = new GuiQMAW(qmaw);
|
||||
screen.back.addAll(back);
|
||||
screen.back.add(qmawID);
|
||||
screen.forward.addAll(forward);
|
||||
screen.forward.remove(screen.forward.size() - 1);
|
||||
FMLCommonHandler.instance().showGuiScreen(screen);
|
||||
}
|
||||
}
|
||||
|
||||
public int getSliderPosition() {
|
||||
@ -213,7 +258,7 @@ public class GuiQMAW extends GuiScreen {
|
||||
|
||||
private void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||
|
||||
int x = 7;
|
||||
int x = 43;
|
||||
int y = 4;
|
||||
|
||||
if(this.icon != null) {
|
||||
@ -242,7 +287,11 @@ public class GuiQMAW extends GuiScreen {
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, 170, ySize);
|
||||
drawTexturedModalRect(guiLeft + 170, guiTop, 22, 0, 170, ySize);
|
||||
drawTexturedModalRect(guiLeft + 170, guiTop, 52, 0, 30, ySize);
|
||||
drawTexturedModalRect(guiLeft + 200, guiTop, 52, 0, 140, ySize);
|
||||
|
||||
if(!back.isEmpty()) drawTexturedModalRect(guiLeft + 3, guiTop + 3, 204, 0, 18, 18);
|
||||
if(!forward.isEmpty()) drawTexturedModalRect(guiLeft + 21, guiTop + 3, 222, 0, 18, 18);
|
||||
|
||||
// scroll bar
|
||||
drawTexturedModalRect(guiLeft + xSize - 15, guiTop + getSliderPosition(), 192, 0, 12, 16);
|
||||
@ -273,7 +322,7 @@ public class GuiQMAW extends GuiScreen {
|
||||
boolean mouseOver = (elementX <= mouseX && elementX + element.getWidth() > mouseX && elementY < mouseY && elementY + element.getHeight() >= mouseY);
|
||||
element.render(mouseOver, elementX, elementY, mouseX, mouseY);
|
||||
if(elementX <= lastClickX && elementX + element.getWidth() > lastClickX && elementY < lastClickY && elementY + element.getHeight() >= lastClickY)
|
||||
element.onClick();
|
||||
element.onClick(this);
|
||||
inset += element.getWidth();
|
||||
}
|
||||
|
||||
@ -283,6 +332,9 @@ public class GuiQMAW extends GuiScreen {
|
||||
|
||||
@Override
|
||||
protected void keyTyped(char typedChar, int keyCode) {
|
||||
|
||||
if(keyCode == Keyboard.KEY_LEFT) back();
|
||||
if(keyCode == Keyboard.KEY_RIGHT) forward();
|
||||
|
||||
if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
|
||||
this.mc.displayGuiScreen((GuiScreen) null);
|
||||
|
||||
@ -5,5 +5,5 @@ 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 onClick();
|
||||
public abstract void onClick(GuiQMAW gui);
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ public class QMAWLoader implements IResourceManagerReloadListener {
|
||||
MainRegistry.logger.info("[QMAW] Loaded " + qmaw.size() + " manual entries! (" + (System.currentTimeMillis() - timestamp) + "ms)");
|
||||
}
|
||||
|
||||
/** For the like 2 people who might consider making an NTM addon and want to include manual pages */
|
||||
/** For the like 2 people who might consider making an NTM addon and want to include manual pages. Requires the mod's actual JAR file as the parameter. */
|
||||
public static void registerModFileURL(File file) {
|
||||
registeredModFiles.add(file);
|
||||
}
|
||||
@ -56,11 +56,14 @@ public class QMAWLoader implements IResourceManagerReloadListener {
|
||||
/** Searches the asset folder for QMAW format JSON files and adds entries based on that */
|
||||
public static void init() {
|
||||
|
||||
//the mod's file, assuming the mod is a file (not the case in a dev env, fuck!)
|
||||
/*//the mod's file, assuming the mod is a file (not the case in a dev env, fuck!)
|
||||
//no fucking null check, if this fails then the entire game will sink along with the ship
|
||||
String path = QMAWLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath();
|
||||
// exclude .class in the case of a dev env
|
||||
if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself
|
||||
MainRegistry.logger.info("[QMAW] Current running file: " + path);
|
||||
if(!path.endsWith(".class")) registerModFileURL(new File(path)); // i am going to shit myself*/ // deactivated because it likely doesn't even fucking work
|
||||
|
||||
// registering of the mod file now happens in the MainRegistry during preinit
|
||||
|
||||
qmaw.clear();
|
||||
triggers.clear();
|
||||
@ -76,7 +79,10 @@ public class QMAWLoader implements IResourceManagerReloadListener {
|
||||
* */
|
||||
public static void agonyEngine() {
|
||||
|
||||
for(File modFile : registeredModFiles) dissectZip(modFile);
|
||||
for(File modFile : registeredModFiles) {
|
||||
logJarAttempt(modFile.getName());
|
||||
dissectZip(modFile);
|
||||
}
|
||||
|
||||
File devEnvManualFolder = new File(Minecraft.getMinecraft().mcDataDir.getAbsolutePath().replace("/eclipse/.".replace('/', File.separatorChar), "") + "/src/main/resources/assets/hbm/manual".replace('/', File.separatorChar));
|
||||
if(devEnvManualFolder.exists() && devEnvManualFolder.isDirectory()) {
|
||||
@ -102,6 +108,7 @@ public class QMAWLoader implements IResourceManagerReloadListener {
|
||||
}
|
||||
}
|
||||
|
||||
public static void logJarAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting jar " + name); }
|
||||
public static void logPackAttempt(String name) { MainRegistry.logger.info("[QMAW] Dissecting resource " + name); }
|
||||
public static void logFoundManual(String name) { MainRegistry.logger.info("[QMAW] Found manual " + name); }
|
||||
|
||||
@ -148,7 +155,7 @@ public class QMAWLoader implements IResourceManagerReloadListener {
|
||||
|
||||
/** Opens a resource pack folder, skips to the manual folder, then tries to dissect that */
|
||||
public static void dissectFolder(File folder) {
|
||||
File manualFolder = new File(folder, "/assets/manual");
|
||||
File manualFolder = new File(folder, "/assets/hbm/manual");
|
||||
if(manualFolder.exists() && manualFolder.isDirectory()) dissectManualFolder(manualFolder);
|
||||
}
|
||||
|
||||
@ -167,6 +174,8 @@ public class QMAWLoader implements IResourceManagerReloadListener {
|
||||
} catch(Exception ex) {
|
||||
MainRegistry.logger.info("[QMAW] Error reading manual " + name + ": " + ex);
|
||||
}
|
||||
} else if(file.isDirectory()) {
|
||||
dissectManualFolder(file); // scrape subfolders too lmao
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -175,6 +184,12 @@ public class QMAWLoader implements IResourceManagerReloadListener {
|
||||
public static void registerJson(String file, JsonObject json) {
|
||||
|
||||
String name = json.get("name").getAsString();
|
||||
|
||||
if(QMAWLoader.qmaw.containsKey(name)) {
|
||||
MainRegistry.logger.info("[QMAW] Skipping existing entry " + file);
|
||||
return;
|
||||
}
|
||||
|
||||
QuickManualAndWiki qmaw = new QuickManualAndWiki(name);
|
||||
|
||||
if(json.has("icon")) {
|
||||
|
||||
@ -81,11 +81,14 @@ public class QComponentLink extends ManualElement {
|
||||
font.drawString(text, x, y, isMouseOver ? hoverColor : color);
|
||||
}
|
||||
|
||||
@Override public void onClick() {
|
||||
@Override public void onClick(GuiQMAW gui) {
|
||||
QuickManualAndWiki qmaw = QMAWLoader.qmaw.get(link);
|
||||
if(qmaw != null) {
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
FMLCommonHandler.instance().showGuiScreen(new GuiQMAW(qmaw));
|
||||
GuiQMAW screen = new GuiQMAW(qmaw);
|
||||
screen.back.addAll(gui.back);
|
||||
screen.back.add(gui.qmawID);
|
||||
FMLCommonHandler.instance().showGuiScreen(screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.hbm.qmaw.components;
|
||||
|
||||
import com.hbm.qmaw.GuiQMAW;
|
||||
import com.hbm.qmaw.ManualElement;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
@ -40,5 +41,5 @@ public class QComponentText extends ManualElement {
|
||||
font.drawString(text, x, y, color);
|
||||
}
|
||||
|
||||
@Override public void onClick() { }
|
||||
@Override public void onClick(GuiQMAW gui) { }
|
||||
}
|
||||
|
||||
@ -15,50 +15,44 @@ import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class RenderNukeFstbmb extends TileEntitySpecialRenderer {
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f)
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||
switch(tileEntity.getBlockMetadata())
|
||||
{
|
||||
case 2:
|
||||
GL11.glRotatef(90, 0F, 1F, 0F); break;
|
||||
case 4:
|
||||
GL11.glRotatef(180, 0F, 1F, 0F); break;
|
||||
case 3:
|
||||
GL11.glRotatef(270, 0F, 1F, 0F); break;
|
||||
case 5:
|
||||
GL11.glRotatef(0, 0F, 1F, 0F); break;
|
||||
@Override
|
||||
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) {
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||
|
||||
switch(tileEntity.getBlockMetadata()) {
|
||||
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
|
||||
case 4: GL11.glRotatef(180, 0F, 1F, 0F); break;
|
||||
case 3: GL11.glRotatef(270, 0F, 1F, 0F); break;
|
||||
case 5: GL11.glRotatef(0, 0F, 1F, 0F); break;
|
||||
}
|
||||
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
bindTexture(ResourceManager.fstbmb_tex);
|
||||
ResourceManager.fstbmb.renderPart("Body");
|
||||
ResourceManager.fstbmb.renderPart("Balefire");
|
||||
|
||||
TileEntityNukeBalefire bf = (TileEntityNukeBalefire)tileEntity;
|
||||
|
||||
if(bf.loaded) {
|
||||
bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/misc/glintBF.png"));
|
||||
RenderMiscEffects.renderClassicGlint(tileEntity.getWorldObj(), f, ResourceManager.fstbmb, "Balefire", 0.0F, 0.8F, 0.15F, 5, 2F);
|
||||
|
||||
FontRenderer font = Minecraft.getMinecraft().fontRenderer;
|
||||
float f3 = 0.04F;
|
||||
GL11.glTranslatef(0.815F, 0.9275F, 0.5F);
|
||||
GL11.glScalef(f3, -f3, f3);
|
||||
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
|
||||
GL11.glRotatef(90, 0, 1, 0);
|
||||
GL11.glDepthMask(false);
|
||||
GL11.glTranslatef(0, 1, 0);
|
||||
font.drawString(bf.getMinutes() + ":" + bf.getSeconds(), 0, 0, 0xff0000);
|
||||
GL11.glDepthMask(true);
|
||||
}
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
bindTexture(ResourceManager.fstbmb_tex);
|
||||
ResourceManager.fstbmb.renderPart("Body");
|
||||
ResourceManager.fstbmb.renderPart("Balefire");
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
TileEntityNukeBalefire bf = (TileEntityNukeBalefire) tileEntity;
|
||||
|
||||
if(bf.loaded) {
|
||||
bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/misc/glintBF.png"));
|
||||
RenderMiscEffects.renderClassicGlint(tileEntity.getWorldObj(), f, ResourceManager.fstbmb, "Balefire", 0.0F, 0.8F, 0.15F, 5, 2F);
|
||||
|
||||
FontRenderer font = Minecraft.getMinecraft().fontRenderer;
|
||||
float f3 = 0.04F;
|
||||
GL11.glTranslatef(0.815F, 0.9275F, 0.5F);
|
||||
GL11.glScalef(f3, -f3, f3);
|
||||
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
|
||||
GL11.glRotatef(90, 0, 1, 0);
|
||||
GL11.glDepthMask(false);
|
||||
GL11.glTranslatef(0, 1, 0);
|
||||
font.drawString(bf.getMinutes() + ":" + bf.getSeconds(), 0, 0, 0xff0000);
|
||||
GL11.glDepthMask(true);
|
||||
}
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,10 +30,10 @@ import net.minecraftforge.client.model.IModelCustom;
|
||||
public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRendererProvider {
|
||||
|
||||
public static final IModelCustom yomiModel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/yomi.obj"), false).asVBO();
|
||||
public static final IModelCustom poohModel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/pooh.obj"), false).asVBO();
|
||||
public static final IModelCustom hundunModel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/trinkets/hundun.obj"), false).asVBO();
|
||||
public static final ResourceLocation yomiTex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/yomi.png");
|
||||
public static final ResourceLocation numbernineTex = new ResourceLocation(RefStrings.MODID, "textures/models/horse/numbernine.png");
|
||||
public static final ResourceLocation poohTex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/pooh.png");
|
||||
public static final ResourceLocation hundunTex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/hundun.png");
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
|
||||
@ -53,7 +53,7 @@ public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRen
|
||||
case NONE: break;
|
||||
case YOMI: GL11.glScaled(0.5, 0.5, 0.5); break;
|
||||
case NUMBERNINE: GL11.glScaled(0.75, 0.75, 0.75); break;
|
||||
case POOH: GL11.glScaled(0.75, 0.75, 0.75); break;
|
||||
case HUNDUN: GL11.glScaled(1, 1, 1); break;
|
||||
}
|
||||
renderPlushie(te.type);
|
||||
|
||||
@ -110,9 +110,9 @@ public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRen
|
||||
IIcon icon = stack.getIconIndex();
|
||||
ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
|
||||
break;
|
||||
case POOH:
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(poohTex);
|
||||
poohModel.renderAll();
|
||||
case HUNDUN:
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(hundunTex);
|
||||
hundunModel.renderPart("goober_posed");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -138,7 +138,7 @@ public class RenderPlushie extends TileEntitySpecialRenderer implements IItemRen
|
||||
case NONE: break;
|
||||
case YOMI: GL11.glScaled(1.25, 1.25, 1.25); break;
|
||||
case NUMBERNINE: GL11.glTranslated(0, 0.25, 0.25); GL11.glScaled(1.25, 1.25, 1.25); break;
|
||||
case POOH: GL11.glTranslated(0, 0.25, 0); GL11.glScaled(1.5, 1.5, 1.5); break;
|
||||
case HUNDUN: GL11.glTranslated(0.5, 0.5, 0); GL11.glScaled(1.25, 1.25, 1.25); break;
|
||||
}
|
||||
renderPlushie(type);
|
||||
}};
|
||||
|
||||
@ -77,7 +77,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
|
||||
|
||||
/** Returns the actual tile entity that represents the core. Only for internal use, and EnergyControl. */
|
||||
public TileEntity getTile() {
|
||||
if(tile == null || tile.isInvalid()) {
|
||||
if(tile == null || tile.isInvalid() || (tile instanceof TileEntityLoadedBase && !((TileEntityLoadedBase) tile).isLoaded)) {
|
||||
tile = this.getTE();
|
||||
}
|
||||
return tile;
|
||||
|
||||
@ -40,7 +40,9 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
if(!this.isLoaded()) {
|
||||
this.loaded = this.isLoaded();
|
||||
|
||||
if(!loaded) {
|
||||
started = false;
|
||||
}
|
||||
|
||||
@ -89,21 +91,15 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU
|
||||
}
|
||||
|
||||
public boolean isLoaded() {
|
||||
|
||||
return hasEgg() && hasBattery();
|
||||
}
|
||||
|
||||
public boolean hasEgg() {
|
||||
|
||||
if(slots[0] != null && slots[0].getItem() == ModItems.egg_balefire) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(slots[0] != null && slots[0].getItem() == ModItems.egg_balefire) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean hasBattery() {
|
||||
|
||||
return getBattery() > 0;
|
||||
}
|
||||
|
||||
|
||||
@ -317,19 +317,19 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
||||
return true;
|
||||
public boolean canExtractItem(int slot, ItemStack stack, int side) {
|
||||
return slot == 2; // only allow removing breeder outputs
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
|
||||
public int[] getAccessibleSlotsFromSide(int side) {
|
||||
return new int[] { 1, 2, 4 };
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
||||
public boolean isItemValidForSlot(int i, ItemStack stack) {
|
||||
|
||||
if(i == 1 && BreederRecipes.getOutput(itemStack) != null)
|
||||
if(i == 1 && BreederRecipes.getOutput(stack) != null)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
@ -239,7 +239,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen
|
||||
ItemStack valid = slots[i];
|
||||
|
||||
if(valid == null) return false; //null? since slots[slot] is not null by now, this other slot needs the item more
|
||||
if(!(valid.isItemEqual(stack) && ItemStack.areItemStackTagsEqual(valid, stack))) continue; //different item anyway? out with it
|
||||
if(!(valid.isItemEqual(stack)/* && ItemStack.areItemStackTagsEqual(valid, stack)*/)) continue; //different item anyway? out with it
|
||||
|
||||
//if there is another slot that actually does need the same item more, cancel
|
||||
if(valid.stackSize < size)
|
||||
|
||||
@ -468,13 +468,13 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
|
||||
@Callback(direct = true)
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] getTemp(Context context, Arguments args) {
|
||||
return new Object[] {heat};
|
||||
return new Object[] {Math.round(heat * 1.0E-5D * 780.0D + 20.0D)};
|
||||
}
|
||||
|
||||
@Callback(direct = true)
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] getPressure(Context context, Arguments args) {
|
||||
return new Object[] {pressure};
|
||||
return new Object[] {Math.round(pressure * 1.0E-5D * 30.0D)};
|
||||
}
|
||||
|
||||
@Callback(direct = true)
|
||||
@ -504,7 +504,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
|
||||
@Callback(direct = true)
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] getInfo(Context context, Arguments args) {
|
||||
return new Object[] {heat, pressure, water.getFill(), steam.getFill(), carbonDioxide.getFill(), isOn};
|
||||
return new Object[] {Math.round(heat * 1.0E-5D * 780.0D + 20.0D), Math.round(pressure * 1.0E-5D * 30.0D), water.getFill(), steam.getFill(), carbonDioxide.getFill(), isOn};
|
||||
}
|
||||
|
||||
@Callback(direct = true, limit = 4)
|
||||
|
||||
@ -153,5 +153,4 @@ public class TileEntityRefueler extends TileEntityLoadedBase implements IFluidSt
|
||||
public FluidTank[] getReceivingTanks() {
|
||||
return new FluidTank[] { tank };
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,9 +2,10 @@ package com.hbm.tileentity.network;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
import com.hbm.calc.Location;
|
||||
import com.hbm.tileentity.IConfigurableMachine;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
import com.hbm.util.Compat;
|
||||
import com.hbm.util.fauxpointtwelve.BlockPos;
|
||||
|
||||
import api.hbm.energymk2.IEnergyReceiverMK2;
|
||||
import cofh.api.energy.EnergyStorage;
|
||||
@ -41,8 +42,8 @@ public class TileEntityConverterHeRf extends TileEntityLoadedBase implements IEn
|
||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||
this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
|
||||
|
||||
Location loc = new Location(worldObj, xCoord, yCoord, zCoord).add(dir);
|
||||
TileEntity entity = loc.getTileEntity();
|
||||
BlockPos loc = new BlockPos(xCoord, yCoord, zCoord).offset(dir);
|
||||
TileEntity entity = Compat.getTileStandard(worldObj, loc.getX(), loc.getY(), loc.getZ());
|
||||
|
||||
if (entity != null && entity instanceof IEnergyReceiver) {
|
||||
IEnergyReceiver receiver = (IEnergyReceiver) entity;
|
||||
|
||||
11
src/main/resources/assets/hbm/manual/material/aluminium.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Aluminium",
|
||||
"icon": ["hbm:item.ingot_aluminium", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_aluminium"], ["hbm:item.plate_aluminium"], ["hbm:item.powder_aluminium"]],
|
||||
"title": {
|
||||
"en_US": "Aluminium"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Common, lightweight metal. Available early on from smelting cryolite ('aluminium-bearing ore') in a [[combination oven|Combination Oven]]. Can be made later by processing [[bauxite|Bauxite]], and [[electrolyzing|Electrolysis Machine]] the resulting alumina solution.<br><br>Used in piping, general fluid handling, as part of [[gunmetal|Gunmetal]] and missile fuselages."
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Cadmium Steel",
|
||||
"icon": ["hbm:item.ingot_cdalloy", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_cdalloy"]],
|
||||
"title": {
|
||||
"en_US": "Cadmium Steel"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Corrosion-resistant alloy, made from [[steel|Steel]] and [[cadmium|Cadmium]]. Alternative to [[technetium steel|Technetium Steel]] in most recipes."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/cinnabar.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Cinnabar",
|
||||
"icon": ["hbm:item.cinnebar", 1, 0],
|
||||
"trigger": [["hbm:item.cinnebar"]],
|
||||
"title": {
|
||||
"en_US": "Cinnabar"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Rare ore. Can be [[acidized|Ore Acidizer]] into 375mB worth of [[mercury|Mercury]] drops, or [[combination smelted|Combination Oven]] into 100mB of mercury and some sulfur. Mainly exists as an early means to get mercury for [[desh|Desh]] production."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/coke.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Coke",
|
||||
"icon": ["hbm:item.coke", 1, 0],
|
||||
"trigger": [["hbm:item.coke", 1, 32767]],
|
||||
"title": {
|
||||
"en_US": "Coke"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "High-purity carbon, has twice the burn value of coal. Can be pressed into [[graphite|Graphite]], used in various [[steel|Steel]] recipes or as a source of carbon for the [[crucible|Crucible]].<br><br>Coal coke can be made by smelting coal briquettes, or combination smelting coal in its various forms.<br><br>Lignite coke is made from the much cheaper and less powerful lignite in much the same way, despite this it has the same characteristics.<br><br>Petroleum coke is made either from non-coal tars in a [[combination oven|Combination Oven]], or by coking various types of oil in a [[coker|Coking Unit]]."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/copper.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Copper",
|
||||
"icon": ["hbm:item.ingot_copper", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_copper"], ["hbm:item.plate_copper"], ["hbm:item.powder_copper"]],
|
||||
"title": {
|
||||
"en_US": "Copper"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Common resource. In its raw form, mostly used as a structural material, and in things that handle high temperatures (as a heat conductor). Strongly used in various alloyed forms.<br><br>[[Minecraft grade copper|Minecraft Grade Copper]] is an alloy made from redstone that is used in almost all electrical things.<br><br>[[Advanced alloy|Advanced Alloy]] is a powerful early tool material which surpasses diamond.<br><br>[[Gunmetal]] is a vital component of many guns, as well as casings for ammunition.<br><br>[[Bismuth bronze|Bismuth Bronze]] and [[arsenic bronze|Arsenic Bronze]] are post-[[RBMK]] materials used in many late-game machines.<br><br>[[BSCCO]] is a [[bismuth|Bismuth]]-derived super conductor needed for high-tier quantum circuits and [[particle accelerator|Particle Accelerator]] coils."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/desh.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Desh",
|
||||
"icon": ["hbm:item.ingot_desh", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_desh"], ["hbm:item.powder_desh"]],
|
||||
"title": {
|
||||
"en_US": "Desh"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "High-strength working alloy made in a [[chemical plant|Chemical Plant]]. Requires [[light oil|Light oil]] from basic [[oil|Crude Oil]] refining, [[mercury|Mercury]], a byproduct of [[centrifuging|Centrifuge]] redstone ore and desh blend, which is just [[shredded|Shredder]] rare earth ore chunks.<br><br>Used in a variety of things, especially tools and weapons. Desh tools are slow and only iron tier, but are the first available ones to be unbreakable and offer many tool abilities."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/graphite.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Graphite",
|
||||
"icon": ["hbm:item.ingot_graphite", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_graphite"]],
|
||||
"title": {
|
||||
"en_US": "Graphite"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Made from pressing coke. Used in nuclear reactors, graphite electrodes for the [[electric arc furnace|Electric Arc Furnace]] or as a source for carbon in various [[crucible|Crucible]] recipes."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/gunmetal.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Gunmetal",
|
||||
"icon": ["hbm:item.ingot_gunmetal", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_gunmetal"], ["hbm:item.plate_gunmetal"]],
|
||||
"title": {
|
||||
"en_US": "Gunmetal"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Alloy of [[aluminium|Aluminium]] and [[copper|Copper]]. Can be made in an anvil, or more efficiently in a [[rotary furnace|Rotary Furnace]]. Used mainly for weapon parts, as well as casings for most ammunition."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/hss.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "High-Speed Steel",
|
||||
"icon": ["hbm:item.ingot_dura_steel", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_dura_steel"], ["hbm:item.powder_dura_steel"], ["hbm:item.plate_dura_steel"]],
|
||||
"title": {
|
||||
"en_US": "High-Speed Steel"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Alloy made from [[steel|Steel]], [[tungsten|Tungsten]] and [[cobalt|Cobalt]] in a [[curcible|Crucible]]. Created as liquid metal, needs to be cast into ingot or plate shape before being usable."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/latex.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Latex",
|
||||
"icon": ["hbm:item.ingot_biorubber", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_biorubber"], ["hbm:item.ball_resin"]],
|
||||
"title": {
|
||||
"en_US": "Latex"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Natural form of rubber, obtainable from dandelions or by pressing jungle wood. Can be replaced in all recipes by [[rubber|Rubber]], but not vice versa."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/lead.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Lead",
|
||||
"icon": ["hbm:item.ingot_lead", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_lead"], ["hbm:item.nugget_lead"], ["hbm:item.powder_lead"]],
|
||||
"title": {
|
||||
"en_US": "Lead"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Common resource. Mainly used for things that involve radiation, as well as ammunition, and as solder for many circuits."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/neptunium.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Neptunium",
|
||||
"icon": ["hbm:item.ingot_neptunium", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_neptunium"], ["hbm:item.billet_neptunium"], ["hbm:item.nugget_neptunium"], ["hbm:item.powder_neptunium"]],
|
||||
"title": {
|
||||
"en_US": "Neptunium"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Fissile isotope, usually found in spent [[uranium-235|Uranium-235]] fuel. Mostly used for nuclear reactors, either pure as high enriched neptunium fuel, or combined with [[uranium-238|Uranium-238]] as medium enriched neptunium fuel. Usable in the [[PWR]] and [[RBMK]]."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/rubber.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Rubber",
|
||||
"icon": ["hbm:item.ingot_rubber", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_rubber"]],
|
||||
"title": {
|
||||
"en_US": "Rubber"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Oil product, derived from [[unsaturated hydrocabons|Unsaturated Hydrocarbons]] and [[sulfur|Sulfur]]. Requires at least a [[cracking tower|Catalytic Cracking Tower]] to make. Can replace [[latex|Latex]] in every recipe."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/sodium.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Sodium",
|
||||
"icon": ["hbm:item.powder_sodium", 1, 0],
|
||||
"trigger": [["hbm:item.powder_sodium"]],
|
||||
"title": {
|
||||
"en_US": "Sodium"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Mainly derived from sodalite, a gem which is found as a [[centrifuge|Centrifuge]] byproduct of many ores. Used in liquid form as a powerful [[PWR]] coolant."
|
||||
}
|
||||
}
|
||||
11
src/main/resources/assets/hbm/manual/material/sulfur.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Sulfur",
|
||||
"icon": ["hbm:item.sulfur", 1, 0],
|
||||
"trigger": [["hbm:item.sulfur"]],
|
||||
"title": {
|
||||
"en_US": "Sulfur"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "Common ore, found in even larger numbers in the nether. Used in a variety of things, like [[sulfuric acid|Sulfuric Acid]], [[rubber|Rubber]] and in yellowcake for [[uranium|Uranium]] hexafluoride. Can also make gunpowder, matchsticks, or act as yellow dye."
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "Weapon Steel",
|
||||
"icon": ["hbm:item.ingot_weaponsteel", 1, 0],
|
||||
"trigger": [["hbm:item.ingot_weaponsteel"], ["hbm:item.plate_weaponsteel"]],
|
||||
"title": {
|
||||
"en_US": "Weapon Steel"
|
||||
},
|
||||
"content": {
|
||||
"en_US": "High-purity version of [[steel|Steel]] made in a [[rotary furnace|Rotary Furnace]]. Requires [[coker gas|Coker Gas]], and therefore a [[coker unit|Coker Unit]]. Used in many mid-game weapons, weapon modifications and missile warheads."
|
||||
}
|
||||
}
|
||||
1538
src/main/resources/assets/hbm/models/trinkets/hundun.obj
Normal file
@ -1,334 +0,0 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'pooh.blend'
|
||||
# www.blender.org
|
||||
o Cube_Cube.001
|
||||
v -0.250000 0.062500 0.250000
|
||||
v 0.250000 0.062500 0.250000
|
||||
v -0.250000 0.062500 -0.250000
|
||||
v 0.250000 0.062500 -0.250000
|
||||
v -0.250000 0.437500 0.250000
|
||||
v 0.250000 0.437500 0.250000
|
||||
v -0.250000 0.437500 -0.250000
|
||||
v 0.250000 0.437500 -0.250000
|
||||
v -0.187500 0.437500 0.187500
|
||||
v 0.187500 0.437500 0.187500
|
||||
v -0.187500 0.437500 -0.187500
|
||||
v 0.187500 0.437500 -0.187500
|
||||
v -0.187500 0.625000 -0.187500
|
||||
v -0.187500 0.625000 0.187500
|
||||
v 0.187500 0.625000 0.187500
|
||||
v 0.187500 0.625000 -0.187500
|
||||
v -0.250000 0.625000 0.250000
|
||||
v 0.250000 0.625000 0.250000
|
||||
v -0.250000 0.625000 -0.250000
|
||||
v 0.250000 0.625000 -0.250000
|
||||
v -0.250000 1.125000 -0.250000
|
||||
v -0.250000 1.125000 0.250000
|
||||
v 0.250000 1.125000 0.250000
|
||||
v 0.250000 1.125000 -0.250000
|
||||
v -0.125000 0.000000 -0.062500
|
||||
v 0.500000 0.000000 -0.062500
|
||||
v -0.125000 0.000000 -0.187500
|
||||
v 0.500000 0.000000 -0.187500
|
||||
v -0.125000 0.125000 -0.187500
|
||||
v -0.125000 0.125000 -0.062500
|
||||
v 0.500000 0.125000 -0.062500
|
||||
v 0.500000 0.125000 -0.187500
|
||||
v -0.125000 0.000000 0.187500
|
||||
v 0.500000 0.000000 0.187500
|
||||
v -0.125000 0.000000 0.062500
|
||||
v 0.500000 0.000000 0.062500
|
||||
v -0.125000 0.125000 0.062500
|
||||
v -0.125000 0.125000 0.187500
|
||||
v 0.500000 0.125000 0.187500
|
||||
v 0.500000 0.125000 0.062500
|
||||
v -0.062500 0.606694 -0.169194
|
||||
v 0.062500 0.606694 -0.169194
|
||||
v -0.062500 0.518306 -0.080806
|
||||
v 0.062500 0.518306 -0.080806
|
||||
v -0.062500 0.253141 -0.345971
|
||||
v -0.062500 0.341529 -0.434359
|
||||
v 0.062500 0.341529 -0.434359
|
||||
v 0.062500 0.253141 -0.345971
|
||||
v -0.062500 0.606694 0.169194
|
||||
v 0.062500 0.606694 0.169194
|
||||
v -0.062500 0.518306 0.080806
|
||||
v 0.062500 0.518306 0.080806
|
||||
v -0.062500 0.253141 0.345971
|
||||
v -0.062500 0.341529 0.434359
|
||||
v 0.062500 0.341529 0.434359
|
||||
v 0.062500 0.253141 0.345971
|
||||
v 0.250000 0.781250 0.031250
|
||||
v 0.250000 0.718750 0.031250
|
||||
v 0.250000 0.781250 -0.031250
|
||||
v 0.250000 0.718750 -0.031250
|
||||
v 0.312500 0.781250 -0.031250
|
||||
v 0.312500 0.781250 0.031250
|
||||
v 0.312500 0.718750 0.031250
|
||||
v 0.312500 0.718750 -0.031250
|
||||
v -0.093750 1.062500 -0.125000
|
||||
v 0.093750 1.062500 -0.125000
|
||||
v -0.093750 1.062500 -0.312500
|
||||
v 0.093750 1.062500 -0.312500
|
||||
v -0.093750 1.250000 -0.312500
|
||||
v -0.093750 1.250000 -0.125000
|
||||
v 0.093750 1.250000 -0.125000
|
||||
v 0.093750 1.250000 -0.312500
|
||||
v -0.093750 1.062500 0.312500
|
||||
v 0.093750 1.062500 0.312500
|
||||
v -0.093750 1.062500 0.125000
|
||||
v 0.093750 1.062500 0.125000
|
||||
v -0.093750 1.250000 0.125000
|
||||
v -0.093750 1.250000 0.312500
|
||||
v 0.093750 1.250000 0.312500
|
||||
v 0.093750 1.250000 0.125000
|
||||
vt 0.400000 -0.000000
|
||||
vt 0.200000 0.173913
|
||||
vt 0.200000 -0.000000
|
||||
vt 0.200000 0.304348
|
||||
vt 0.400000 0.478261
|
||||
vt 0.200000 0.478261
|
||||
vt 0.600000 0.173913
|
||||
vt 0.400000 0.304348
|
||||
vt 0.400000 0.173913
|
||||
vt 0.000000 0.304348
|
||||
vt 0.000000 0.173913
|
||||
vt 0.800000 0.173913
|
||||
vt 0.600000 0.304348
|
||||
vt 0.700000 0.304348
|
||||
vt 0.550000 0.369565
|
||||
vt 0.550000 0.304348
|
||||
vt 1.000000 0.304348
|
||||
vt 0.850000 0.369565
|
||||
vt 0.850000 0.304348
|
||||
vt 0.700000 0.369565
|
||||
vt 0.400000 0.369565
|
||||
vt 0.400000 0.304348
|
||||
vt 0.400000 0.478261
|
||||
vt 0.200000 0.652174
|
||||
vt 0.200000 0.478261
|
||||
vt 0.200000 0.826087
|
||||
vt 0.400000 1.000000
|
||||
vt 0.200000 1.000000
|
||||
vt 0.600000 0.652174
|
||||
vt 0.400000 0.826087
|
||||
vt 0.400000 0.652174
|
||||
vt -0.000000 0.826087
|
||||
vt -0.000000 0.652174
|
||||
vt 0.800000 0.652174
|
||||
vt 0.600000 0.826087
|
||||
vt 0.900000 0.260870
|
||||
vt 0.950000 0.043478
|
||||
vt 0.950000 0.260870
|
||||
vt 0.800000 0.043478
|
||||
vt 0.850000 0.260870
|
||||
vt 0.800000 0.260870
|
||||
vt 0.850000 -0.000000
|
||||
vt 0.800000 0.000000
|
||||
vt 0.800000 0.304348
|
||||
vt 0.850000 0.304348
|
||||
vt 0.850000 0.043478
|
||||
vt 0.900000 0.043478
|
||||
vt 1.000000 0.260870
|
||||
vt 0.900000 0.260870
|
||||
vt 0.950000 0.043478
|
||||
vt 0.950000 0.260870
|
||||
vt 0.800000 0.043478
|
||||
vt 0.850000 0.260870
|
||||
vt 0.800000 0.260870
|
||||
vt 0.850000 -0.000000
|
||||
vt 0.800000 0.000000
|
||||
vt 0.800000 0.304348
|
||||
vt 0.850000 0.304348
|
||||
vt 0.850000 0.043478
|
||||
vt 0.900000 0.043478
|
||||
vt 1.000000 0.260870
|
||||
vt 0.550000 0.369565
|
||||
vt 0.475000 0.434783
|
||||
vt 0.475000 0.369565
|
||||
vt 0.400000 0.043478
|
||||
vt 0.450000 0.000000
|
||||
vt 0.450000 0.043478
|
||||
vt 0.600000 0.173913
|
||||
vt 0.550000 0.043478
|
||||
vt 0.600000 0.043478
|
||||
vt 0.450000 0.173913
|
||||
vt 0.500000 0.043478
|
||||
vt 0.500000 0.173913
|
||||
vt 0.550000 0.173913
|
||||
vt 0.400000 0.173913
|
||||
vt 0.400000 0.000000
|
||||
vt 0.450000 0.043478
|
||||
vt 0.400000 0.043478
|
||||
vt 0.500000 0.173913
|
||||
vt 0.450000 0.173913
|
||||
vt 0.550000 0.043478
|
||||
vt 0.600000 0.173913
|
||||
vt 0.550000 0.173913
|
||||
vt 0.500000 0.043478
|
||||
vt 0.400000 0.173913
|
||||
vt 0.425000 0.521739
|
||||
vt 0.450000 0.543478
|
||||
vt 0.425000 0.543478
|
||||
vt 0.425000 0.565217
|
||||
vt 0.450000 0.565217
|
||||
vt 0.475000 0.543478
|
||||
vt 0.450000 0.521739
|
||||
vt 0.475000 0.521739
|
||||
vt 0.400000 0.521739
|
||||
vt 0.400000 0.543478
|
||||
vt 0.450000 0.500000
|
||||
vt 0.425000 0.500000
|
||||
vt 0.475000 0.500000
|
||||
vt 0.550000 0.565217
|
||||
vt 0.475000 0.565217
|
||||
vt 0.550000 0.434783
|
||||
vt 0.700000 0.434783
|
||||
vt 0.625000 0.500000
|
||||
vt 0.625000 0.434783
|
||||
vt 0.550000 0.500000
|
||||
vt 0.400000 0.500000
|
||||
vt 0.400000 0.434783
|
||||
vt 0.550000 0.369565
|
||||
vt 0.475000 0.434783
|
||||
vt 0.475000 0.369565
|
||||
vt 0.475000 0.500000
|
||||
vt 0.550000 0.565217
|
||||
vt 0.475000 0.565217
|
||||
vt 0.550000 0.434783
|
||||
vt 0.700000 0.434783
|
||||
vt 0.625000 0.500000
|
||||
vt 0.625000 0.434783
|
||||
vt 0.550000 0.500000
|
||||
vt 0.400000 0.500000
|
||||
vt 0.400000 0.434783
|
||||
vt 0.800000 0.304348
|
||||
vt 1.000000 0.369565
|
||||
vt 0.800000 0.826087
|
||||
vt 1.000000 0.043478
|
||||
vt 1.000000 0.043478
|
||||
vt 0.400000 0.000000
|
||||
vt 0.450000 0.000000
|
||||
vt 0.600000 0.043478
|
||||
vt 0.700000 0.500000
|
||||
vt 0.700000 0.500000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
vn 0.0000 0.0000 1.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn -1.0000 0.0000 0.0000
|
||||
vn 0.0000 -0.7071 -0.7071
|
||||
vn 0.0000 -0.7071 0.7071
|
||||
vn 0.0000 0.7071 -0.7071
|
||||
vn 0.0000 0.7071 0.7071
|
||||
s off
|
||||
f 3/1/1 2/2/1 1/3/1
|
||||
f 6/4/2 7/5/2 5/6/2
|
||||
f 3/7/3 8/8/3 4/9/3
|
||||
f 2/2/4 5/10/4 1/11/4
|
||||
f 4/9/5 6/4/5 2/2/5
|
||||
f 1/12/6 7/13/6 3/7/6
|
||||
f 12/14/5 15/15/5 10/16/5
|
||||
f 9/17/6 13/18/6 11/19/6
|
||||
f 11/19/3 16/20/3 12/14/3
|
||||
f 10/16/4 14/21/4 9/22/4
|
||||
f 19/23/1 18/24/1 17/25/1
|
||||
f 23/26/2 21/27/2 22/28/2
|
||||
f 19/29/3 24/30/3 20/31/3
|
||||
f 18/24/4 22/32/4 17/33/4
|
||||
f 20/31/5 23/26/5 18/24/5
|
||||
f 17/34/6 21/35/6 19/29/6
|
||||
f 27/36/1 26/37/1 25/38/1
|
||||
f 31/39/2 29/40/2 30/41/2
|
||||
f 28/42/5 31/39/5 26/43/5
|
||||
f 25/44/6 29/40/6 27/45/6
|
||||
f 27/36/3 32/46/3 28/47/3
|
||||
f 26/37/4 30/48/4 25/38/4
|
||||
f 35/49/1 34/50/1 33/51/1
|
||||
f 39/52/2 37/53/2 38/54/2
|
||||
f 36/55/5 39/52/5 34/56/5
|
||||
f 33/57/6 37/53/6 35/58/6
|
||||
f 35/49/3 40/59/3 36/60/3
|
||||
f 34/50/4 38/61/4 33/51/4
|
||||
f 67/62/1 66/63/1 65/64/1
|
||||
f 47/65/7 45/66/7 46/67/7
|
||||
f 42/68/5 48/69/5 47/70/5
|
||||
f 41/71/6 45/72/6 43/73/6
|
||||
f 43/73/8 48/69/8 44/74/8
|
||||
f 42/75/9 46/67/9 41/71/9
|
||||
f 53/76/8 55/77/8 54/78/8
|
||||
f 55/77/5 52/79/5 50/80/5
|
||||
f 53/81/6 49/82/6 51/83/6
|
||||
f 56/84/7 51/83/7 52/79/7
|
||||
f 54/78/10 50/80/10 49/85/10
|
||||
f 63/86/5 61/87/5 62/88/5
|
||||
f 57/89/2 61/87/2 59/90/2
|
||||
f 59/91/3 64/92/3 60/93/3
|
||||
f 58/94/4 62/88/4 57/95/4
|
||||
f 60/96/1 63/86/1 58/97/1
|
||||
f 71/98/2 69/99/2 70/100/2
|
||||
f 68/101/5 71/98/5 66/63/5
|
||||
f 65/102/6 69/103/6 67/104/6
|
||||
f 67/104/3 72/105/3 68/101/3
|
||||
f 66/63/4 70/106/4 65/107/4
|
||||
f 75/108/1 74/109/1 73/110/1
|
||||
f 79/111/2 77/112/2 78/113/2
|
||||
f 76/114/5 79/111/5 74/109/5
|
||||
f 73/115/6 77/116/6 75/117/6
|
||||
f 75/117/3 80/118/3 76/114/3
|
||||
f 74/109/4 78/119/4 73/120/4
|
||||
f 3/1/1 4/9/1 2/2/1
|
||||
f 6/4/2 8/8/2 7/5/2
|
||||
f 3/7/3 7/13/3 8/8/3
|
||||
f 2/2/4 6/4/4 5/10/4
|
||||
f 4/9/5 8/8/5 6/4/5
|
||||
f 1/12/6 5/121/6 7/13/6
|
||||
f 12/14/5 16/20/5 15/15/5
|
||||
f 9/17/6 14/122/6 13/18/6
|
||||
f 11/19/3 13/18/3 16/20/3
|
||||
f 10/16/4 15/15/4 14/21/4
|
||||
f 19/23/1 20/31/1 18/24/1
|
||||
f 23/26/2 24/30/2 21/27/2
|
||||
f 19/29/3 21/35/3 24/30/3
|
||||
f 18/24/4 23/26/4 22/32/4
|
||||
f 20/31/5 24/30/5 23/26/5
|
||||
f 17/34/6 22/123/6 21/35/6
|
||||
f 27/36/1 28/47/1 26/37/1
|
||||
f 31/39/2 32/46/2 29/40/2
|
||||
f 28/42/5 32/46/5 31/39/5
|
||||
f 25/44/6 30/41/6 29/40/6
|
||||
f 27/36/3 29/40/3 32/46/3
|
||||
f 26/37/4 31/124/4 30/48/4
|
||||
f 35/49/1 36/60/1 34/50/1
|
||||
f 39/52/2 40/59/2 37/53/2
|
||||
f 36/55/5 40/59/5 39/52/5
|
||||
f 33/57/6 38/54/6 37/53/6
|
||||
f 35/49/3 37/53/3 40/59/3
|
||||
f 34/50/4 39/125/4 38/61/4
|
||||
f 67/62/1 68/101/1 66/63/1
|
||||
f 47/65/7 48/126/7 45/66/7
|
||||
f 42/68/5 44/74/5 48/69/5
|
||||
f 41/71/6 46/67/6 45/72/6
|
||||
f 43/73/8 45/72/8 48/69/8
|
||||
f 42/75/9 47/65/9 46/67/9
|
||||
f 53/76/8 56/127/8 55/77/8
|
||||
f 55/77/5 56/84/5 52/79/5
|
||||
f 53/81/6 54/128/6 49/82/6
|
||||
f 56/84/7 53/81/7 51/83/7
|
||||
f 54/78/10 55/77/10 50/80/10
|
||||
f 63/86/5 64/92/5 61/87/5
|
||||
f 57/89/2 62/88/2 61/87/2
|
||||
f 59/91/3 61/87/3 64/92/3
|
||||
f 58/94/4 63/86/4 62/88/4
|
||||
f 60/96/1 64/92/1 63/86/1
|
||||
f 71/98/2 72/105/2 69/99/2
|
||||
f 68/101/5 72/105/5 71/98/5
|
||||
f 65/102/6 70/129/6 69/103/6
|
||||
f 67/104/3 69/103/3 72/105/3
|
||||
f 66/63/4 71/98/4 70/106/4
|
||||
f 75/108/1 76/114/1 74/109/1
|
||||
f 79/111/2 80/118/2 77/112/2
|
||||
f 76/114/5 80/118/5 79/111/5
|
||||
f 73/115/6 78/130/6 77/116/6
|
||||
f 75/117/3 77/116/3 80/118/3
|
||||
f 74/109/4 79/111/4 78/119/4
|
||||
@ -64,6 +64,7 @@
|
||||
"block.fel": {"category": "block", "sounds": [{"name": "block/fel", "stream": false}]},
|
||||
"block.hephaestusRunning": {"category": "block", "sounds": [{"name": "block/hephaestusRunning", "stream": false}]},
|
||||
"block.squeakyToy": {"category": "block", "sounds": [{"name": "block/squeakyToy", "stream": false}]},
|
||||
"block.hunduns_magnificent_howl": {"category": "block", "sounds": [{"name": "block/hunduns_magnificent_howl", "stream": false}]},
|
||||
"block.pyroOperate": {"category": "block", "sounds": [{"name": "block/pyroOperate", "stream": false}]},
|
||||
"block.motor": {"category": "block", "sounds": [{"name": "block/motor", "stream": false}]},
|
||||
"block.engine": {"category": "block", "sounds": [{"name": "block/engine", "stream": false}]},
|
||||
|
||||
|
Before Width: | Height: | Size: 1017 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 270 B |
|
Before Width: | Height: | Size: 181 B After Width: | Height: | Size: 153 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 409 B |