Merge branch 'HbmMods:master' into rulang3

This commit is contained in:
Raaaaaaaaaay 2026-07-26 23:29:59 +03:00 committed by GitHub
commit c31845422d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
177 changed files with 2006 additions and 1743 deletions

View File

@ -13,6 +13,13 @@
* Additionally, channels can be drilled by right clicking a pile addon device with the hand drill, the addon doesn't need to be removed beforehand
* This is mainly for convenience when disassembling and reassembling the reactor, which requires all channels to be drilled again
* Piles that overheat will explode, throwing flaming graphite everywhere
* Satelllite Ground Station
* Can relay RoR commands to connected satellites and satellite info back to RoR
* Platemetal
* Decorative connected texture metal block
* Comes in all colors except brown
* NTM poop theory debunked
* Make a nice clanking noise when placing and breaking
## Changed
* Updated all oil well GUI textures
@ -29,6 +36,19 @@
* The small pylon now has a steel variant
* Items in the battery socket which previously didn't show up in the socket's model are now rendered
* Reduced the cost for the heavy stirling engine
* Removed the satellite interface item for being basically completely useless
* Updated the satellite ID manager texture and recipe
* Satellite ID chips are now soldered
* Overhauled all satellites
* Satellites now use one item ID with meta, most satellites now have new textures
* Satellites can now be connected to ground stations and controlled with RoR commands
* Satellites now have manual pages detailing the commands
* The recipes have been updated, they now use mostly common parts and no longer feature the satellite base and heads items which are welded together
* Legacy satellites still function and can still be launched
* The PWR's coolant levels can now be read with RoR
* Soyuz and related assembly recipes now use 25kHE/t instead of just 100
* Updated the GUI textures for the refinery, various particle accelerator parts and a few other machines
* Glyphid hive blocks now use state-of-the-fart flesh sounds
## Fixed
* Fixed held block being placed when not sneaking when opening the cable diode's GUI
@ -39,3 +59,4 @@
* This also fixes the same phenomenon for other types of beams, such as those from hitscan laser and tesla weapons
* Fixed some issues regarding the new crane structure
* Fixed skeletonizer ashes floating over the floor after landing
* Fixed backface rendering of the capacitor frames when inserted in the battery socket

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=5758
mod_build_number=5768
credits=HbMinecraft,\
\ rodolphito (explosion algorithms),\

View File

@ -34,6 +34,10 @@ public interface IRORInteractive extends IRORInfo {
return params;
}
public static int parseInt(String val) {
return parseInt(val, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
public static int parseInt(String val, int min, int max) {
int result = 0;
try { result = Integer.parseInt(val); } catch(Exception x) {

View File

@ -14,7 +14,7 @@ public class BlockEnumMulti extends BlockMulti {
public Class<? extends Enum> theEnum;
public boolean multiName;
private boolean multiTexture;
protected boolean multiTexture;
public BlockEnumMulti(Material mat, Class<? extends Enum> theEnum, boolean multiName, boolean multiTexture) {
super(mat);

View File

@ -26,7 +26,12 @@ public class BlockEnums {
public static enum EnumStalagmiteType {
SULFUR,
ASBESTOS
ASBESTOS,
ICE,
SNOW,
GLYPHID1,
GLYPHID2,
GLYPHID3
}
public static enum EnumCMMaterials {
@ -81,4 +86,21 @@ public class BlockEnums {
HALOGEN
}
public static enum PlatemetalType {
BASE,
BLACK,
WHITE,
RED,
GREEN,
LIGHT_GRAY,
BLUE,
PURPLE,
CYAN,
PINK,
LIME,
YELLOW,
LIGHT_BLUE,
MAGENTA,
ORANGE
}
}

View File

@ -255,6 +255,7 @@ public class ModBlocks {
public static Block deco_rusty_steel;
public static Block deco_lead;
public static Block deco_beryllium;
public static Block platemetal;
public static Block deco_asbestos;
public static Block deco_rbmk;
public static Block deco_rbmk_smooth;
@ -1430,6 +1431,7 @@ public class ModBlocks {
deco_rusty_steel = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_rusty_steel").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_rusty_steel");
deco_lead = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_lead").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_lead");
deco_beryllium = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_beryllium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_beryllium");
platemetal = new BlockEnumMultiCT(Material.iron, BlockEnums.PlatemetalType.class, true, true).setBlockName("platemetal").setCreativeTab(MainRegistry.blockTab).setStepSound(ModSoundTypes.platemetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":platemetal");
deco_asbestos = new BlockOutgas(Material.cloth, true, 5, true).noFortune().setBlockName("deco_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_asbestos");
deco_rbmk = new BlockGeneric(Material.iron).setBlockName("deco_rbmk").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_top");
deco_rbmk_smooth = new BlockGeneric(Material.iron).setBlockName("deco_rbmk_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_blank_top");
@ -1642,8 +1644,8 @@ public class ModBlocks {
mush = new BlockMush(Material.plants).setBlockName("mush").setCreativeTab(MainRegistry.blockTab).setLightLevel(0.5F).setStepSound(Block.soundTypeGrass).setBlockTextureName(RefStrings.MODID + ":mush");
mush_block = new BlockMushHuge(Material.plants).setBlockName("mush_block").setLightLevel(1.0F).setStepSound(Block.soundTypeGrass).setHardness(0.2F).setBlockTextureName(RefStrings.MODID + ":mush_block_skin");
mush_block_stem = new BlockMushHuge(Material.plants).setBlockName("mush_block_stem").setLightLevel(1.0F).setStepSound(Block.soundTypeGrass).setHardness(0.2F).setBlockTextureName(RefStrings.MODID + ":mush_block_stem");
glyphid_base = new BlockGlyphid(Material.coral).setBlockName("glyphid_base").setStepSound(Block.soundTypeCloth).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":glyphid_base");
glyphid_spawner = new BlockGlyphidSpawner(Material.coral).setBlockName("glyphid_spawner").setStepSound(Block.soundTypeCloth).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":glyphid_eggs_alt");
glyphid_base = new BlockGlyphid(Material.coral).setBlockName("glyphid_base").setStepSound(ModSoundTypes.flesh).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":glyphid_base");
glyphid_spawner = new BlockGlyphidSpawner(Material.coral).setBlockName("glyphid_spawner").setStepSound(ModSoundTypes.flesh).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":glyphid_eggs_alt");
plant_flower = new BlockNTMFlower().setBlockName("plant_flower").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGrass).setHardness(0.0F);
plant_tall = new BlockTallPlant().setBlockName("plant_tall").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGrass).setHardness(0.0F);
@ -2585,6 +2587,7 @@ public class ModBlocks {
GameRegistry.registerBlock(deco_rusty_steel, deco_rusty_steel.getUnlocalizedName());
GameRegistry.registerBlock(deco_lead, deco_lead.getUnlocalizedName());
GameRegistry.registerBlock(deco_beryllium, deco_beryllium.getUnlocalizedName());
GameRegistry.registerBlock(platemetal, ItemBlockBlastInfo.class, platemetal.getUnlocalizedName());
GameRegistry.registerBlock(deco_asbestos, deco_asbestos.getUnlocalizedName());
GameRegistry.registerBlock(deco_emitter, ItemBlockBase.class, deco_emitter.getUnlocalizedName());
GameRegistry.registerBlock(part_emitter, ItemBlockBase.class, part_emitter.getUnlocalizedName());
@ -2915,7 +2918,7 @@ public class ModBlocks {
GameRegistry.registerBlock(red_barrel, ItemBlockLore.class, red_barrel.getUnlocalizedName());
GameRegistry.registerBlock(pink_barrel, ItemBlockLore.class, pink_barrel.getUnlocalizedName());
GameRegistry.registerBlock(lox_barrel, ItemBlockLore.class, lox_barrel.getUnlocalizedName());
GameRegistry.registerBlock(taint_barrel, taint_barrel.getUnlocalizedName());
GameRegistry.registerBlock(taint_barrel, ItemBlockLore.class, taint_barrel.getUnlocalizedName());
GameRegistry.registerBlock(yellow_barrel, yellow_barrel.getUnlocalizedName());
GameRegistry.registerBlock(vitrified_barrel, vitrified_barrel.getUnlocalizedName());

View File

@ -10,4 +10,6 @@ public class ModSoundTypes {
if(type == ModSoundType.SubType.BREAK) in -= 0.15F;
return in + rand.nextFloat() * 0.2F;
});
public static final ModSoundType flesh = ModSoundType.placeBreakStep("hbm:block.flesh", "hbm:block.flesh", "hbm:block.flesh", 0.5F, 1.0F);
public static final ModSoundType platemetal = ModSoundType.placeBreakStep("hbm:block.platemetalPlace", "hbm:block.platemetalPlace", "hbm:step.platemetal", 1.0F, 1.0F);
}

View File

@ -0,0 +1,65 @@
package com.hbm.blocks.generic;
import com.hbm.blocks.BlockEnumMulti;
import com.hbm.render.block.ct.CT;
import com.hbm.render.block.ct.CTStitchReceiver;
import com.hbm.render.block.ct.IBlockCT;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
public class BlockEnumMultiCT extends BlockEnumMulti implements IBlockCT {
@SideOnly(Side.CLIENT)
public CTStitchReceiver[] receivers;
// im planning ts for shi like deco blocks n shit when the time comes
public BlockEnumMultiCT(Material mat, Class<? extends Enum> theEnum, boolean multiName, boolean multiTexture)
{
super(mat, theEnum, multiName, multiTexture);
}
@Override
public int getRenderType() {
return CT.renderID;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister reg) {
if(multiTexture) {
Enum[] enums = theEnum.getEnumConstants();
this.icons = new IIcon[enums.length];
this.receivers = new CTStitchReceiver[enums.length];
for(int i = 0; i < icons.length; i++)
{
Enum num = enums[i];
String texName = this.getTextureMultiName(num);
this.icons[i] = reg.registerIcon(texName);
this.receivers[i] = IBlockCT.primeReceiver(reg, texName, this.icons[i]);
}
}
else
{
this.blockIcon = reg.registerIcon(this.getTextureName());
this.receivers = new CTStitchReceiver[1];
this.receivers[0] = IBlockCT.primeReceiver(reg, this.getTextureName(), this.blockIcon);
}
}
@Override
public IIcon[] getFragments(IBlockAccess world, int x, int y, int z, int side)
{
int meta = world.getBlockMetadata(x, y, z);
return receivers[meta % receivers.length].fragCache;
}
@Override
public boolean canConnect(IBlockAccess world, int x, int y, int z, Block block) {
return this == block;
}
}

View File

@ -10,6 +10,7 @@ import com.hbm.items.ModItems;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
@ -43,6 +44,8 @@ public class BlockStalagmite extends BlockEnumMulti {
switch(meta) {
case 0: return ModItems.sulfur;
case 1: return ModItems.powder_asbestos;
case 2: return ModItems.powder_ice;
case 3: return Items.snowball;
}
return null;

View File

@ -17,7 +17,6 @@ import net.minecraft.world.World;
public class RedBarrel extends BlockDetonatable {
// Flammable barrels also explode when shot
public RedBarrel(Material material, boolean flammable) {
super(material, flammable ? 2 : 0, flammable ? 15 : 0, 100, true, flammable);
}

View File

@ -19,6 +19,7 @@ import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineSatLink extends BlockDummyable implements ILookOverlay {
@ -36,6 +37,17 @@ public class MachineSatLink extends BlockDummyable implements ILookOverlay {
@Override public int[] getDimensions() { return new int[] {6, 0, 1, 0, 1, 0}; }
@Override public int getOffset() { return 0; }
@Override
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ);
this.makeExtra(world, x + rot.offsetX, y, z + rot.offsetZ);
this.makeExtra(world, x - dir.offsetX + rot.offsetX, y, z - dir.offsetZ + rot.offsetZ);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {

View File

@ -3,7 +3,7 @@ package com.hbm.commands;
import com.hbm.items.ISatChip;
import com.hbm.items.ModItems;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.XSatelliteRegistry;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
@ -38,7 +38,7 @@ public class CommandSatellites extends CommandBase {
case "orbit":
EntityPlayer player = getCommandSenderAsPlayer(sender);
if(player.getHeldItem().getItem() instanceof ISatChip && player.getHeldItem().getItem() != ModItems.sat_chip) {
Satellite.orbit(player.worldObj, Satellite.getIDFromItem(player.getHeldItem().getItem()), ISatChip.getFreqS(player.getHeldItem()), player.posX, player.posY, player.posZ);
XSatelliteRegistry.orbit(player.worldObj, player.getHeldItem(), ISatChip.getFreqS(player.getHeldItem()), player.posX, player.posY, player.posZ);
player.getHeldItem().stackSize -= 1;
sender.addChatMessage(new ChatComponentTranslation("commands.satellite.satellite_orbited").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GREEN)));
} else {

View File

@ -42,6 +42,8 @@ public class StructureConfig {
public static int lighthouseSpawnWeight = 4;
public static int oilRigSpawnWeight = 5;
public static int broadcastingTowerSpawnWeight = 25;
public static int waterPumpSpawnWeight = 15;
public static int deadDishSmallSpawnWeight = 15;
public static int beachedPatrolSpawnWeight = 15;
public static int vertibirdSpawnWeight = 6;
public static int vertibirdCrashedSpawnWeight = 10;
@ -117,6 +119,8 @@ public class StructureConfig {
craneSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.39_craneSpawnWeight", "Spawn weight for crane structure.", 20);
broadcastingTowerSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.40_broadcastingTowerSpawnWeight", "Spawn weight for broadcasting tower structure.", 25);
towerBaseSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.41_towerBaseSpawnWeight", "Spawn weight for tower base.", 30);
waterPumpSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.42_waterPumpSpawnWeight", "Spawn weight for water pump structure.", 15);
deadDishSmallSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.43_deadDishSmallSpawnWeight", "Spawn weight for dead dish small structure.", 15);
structureMinChunks = CommonConfig.setDef(structureMinChunks, 4);

View File

@ -3,7 +3,6 @@ package com.hbm.crafting;
import static com.hbm.inventory.OreDictManager.*;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemBreedingRod.*;
import com.hbm.items.machine.ItemCircuit.EnumCircuitType;
import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel;
import com.hbm.items.machine.ItemWatzPellet.EnumWatzType;
import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType;
@ -87,14 +86,6 @@ public class RodRecipes {
CraftingManager.addShapelessAuto(new ItemStack(ModItems.nugget_lead, 24), new Object[] { new ItemStack(ModItems.rod_quad, 1, BreedingRodType.LEAD.ordinal()) });
addBreedingRod(U, ModItems.billet_uranium, BreedingRodType.URANIUM);
//Pile fuel
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_uranium, 1), new Object[] { " U ", "PUP", " U ", 'P', IRON.plate(), 'U', U.billet() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_source, 1), new Object[] { " U ", "PUP", " U ", 'P', IRON.plate(), 'U', ModItems.billet_ra226be });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_boron, 1), new Object[] { " B ", " W ", " B ", 'B', B.ingot(), 'W', KEY_PLANKS });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.pile_rod_lithium, 1), new Object[] { ModItems.cell_empty, LI.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pile_rod_detector, 1), new Object[] { " B ", "CM ", " B ", 'B', B.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'M', ModItems.motor });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.rbmk_fuel_empty, 1), new Object[] { "ZRZ", "Z Z", "ZRZ", 'Z', ZR.ingot(), 'R', ModItems.rod_quad_empty });
addRBMKRod(U, ModItems.rbmk_fuel_ueu);
addRBMKRod(ModItems.billet_uranium_fuel, ModItems.rbmk_fuel_meu);

View File

@ -92,6 +92,7 @@ public class EntityMappings {
addEntity(EntityBombletZeta.class, "entity_zeta", 1000);
addEntity(EntityOrangeFX.class, "entity_agent_orange", 1000);
addEntity(EntityDeathBlast.class, "entity_laser_blast", 1000);
addEntity(EntityOrbitalLaser.class, "entity_orbital_laser", 1000);
addEntity(EntityBurningFOEQ.class, "entity_burning_foeq", 1000);
addEntity(EntityFallingNuke.class, "entity_falling_bomb", 1000);
addEntity(EntityBulletBaseNT.class, "entity_bullet_mk3", 250, false);

View File

@ -1,7 +1,5 @@
package com.hbm.entity.logic;
import com.hbm.entity.projectile.EntityBulletBaseNT;
import com.hbm.handler.BulletConfigSyncingUtil;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.packet.toclient.AuxParticlePacketNT;
@ -10,15 +8,14 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class EntityDeathBlast extends Entity {
public static final int maxAge = 60;
public EntityDeathBlast(World p_i1582_1_) {
super(p_i1582_1_);
public EntityDeathBlast(World world) {
super(world);
this.ignoreFrustumCheck = true;
}
@ -39,20 +36,6 @@ public class EntityDeathBlast extends Entity {
worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(worldObj, 40, posX, posY, posZ));
int count = 100;
for(int i = 0; i < count; i++) {
Vec3 vec = Vec3.createVectorHelper(0.2, 0, 0);
vec.rotateAroundY((float)(2 * Math.PI * i / (float)count));
EntityBulletBaseNT laser = new EntityBulletBaseNT(worldObj, BulletConfigSyncingUtil.MASKMAN_BOLT);
laser.setPosition(posX, posY + 2, posZ);
laser.motionX = vec.xCoord;
laser.motionZ = vec.zCoord;
laser.motionY = -0.01;
worldObj.spawnEntityInWorld(laser);
}
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "muke");
PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, posX, posY + 0.5, posZ), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 250));

View File

@ -0,0 +1,68 @@
package com.hbm.entity.logic;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard;
import com.hbm.explosion.vanillant.standard.BlockProcessorStandard;
import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth;
import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon;
import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard;
import com.hbm.util.DamageResistanceHandler.DamageClass;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public class EntityOrbitalLaser extends Entity {
public static final int maxAge = 5;
public EntityOrbitalLaser(World world) {
super(world);
this.ignoreFrustumCheck = true;
}
@Override
protected void entityInit() { }
@Override
protected void readEntityFromNBT(NBTTagCompound nbt) { }
@Override
protected void writeEntityToNBT(NBTTagCompound nbt) { }
@Override
public void onUpdate() {
if(this.ticksExisted >= maxAge && !worldObj.isRemote) this.setDead();
}
public void explode() {
ExplosionVNT vnt = new ExplosionVNT(worldObj, posX, posY, posZ, 5F);
vnt.setBlockAllocator(new BlockAllocatorStandard());
vnt.setBlockProcessor(new BlockProcessorStandard());
vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, 1_000F).setupPiercing(50F, 0.5F).setDamageClass(DamageClass.LASER));
vnt.setPlayerProcessor(new PlayerProcessorStandard());
vnt.setSFX(new ExplosionEffectWeapon(15, 3.5F, 1.25F));
vnt.explode();
}
@Override
@SideOnly(Side.CLIENT)
public int getBrightnessForRender(float p_70070_1_) {
return 15728880;
}
@Override
public float getBrightness(float p_70013_1_) {
return 1.0F;
}
@Override
@SideOnly(Side.CLIENT)
public boolean isInRangeToRenderDist(double distance) {
return distance < 25000;
}
}

View File

@ -7,7 +7,7 @@ import com.hbm.items.ISatChip;
import com.hbm.items.ModItems;
import com.hbm.lib.ModDamageSource;
import com.hbm.main.MainRegistry;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.XSatelliteRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -113,10 +113,8 @@ public class EntitySoyuz extends Entity {
}
if(load.getItem() instanceof ISatChip) {
int freq = ISatChip.getFreqS(load);
Satellite.orbit(worldObj, Satellite.getIDFromItem(load.getItem()), freq, posX, posY, posZ);
XSatelliteRegistry.orbit(worldObj, load, freq, posX, posY, posZ);
}
}
}

View File

@ -20,7 +20,7 @@ public class CentrifugeRecipeHandler extends NEIUniversalHandler {
@Override
public void loadTransferRects() {
super.loadTransferRects();
transferRectsGui.add(new RecipeTransferRect(new Rectangle(56, 0, 80, 38), "ntmCentrifuge"));
transferRectsGui.add(new RecipeTransferRect(new Rectangle(63, 7, 80, 38), "ntmCentrifuge"));
guiGui.add(GUIMachineCentrifuge.class);
RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui);
}

View File

@ -20,7 +20,7 @@ public class MixerHandler extends NEIUniversalHandler {
@Override
public void loadTransferRects() {
super.loadTransferRects();
transferRectsGui.add(new RecipeTransferRect(new Rectangle(57, 25, 52, 44), "ntmMixer"));
transferRectsGui.add(new RecipeTransferRect(new Rectangle(66, 20, 52, 44), "ntmMixer"));
guiGui.add(GUIMixer.class);
RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui);
}

View File

@ -162,7 +162,7 @@ public class RefineryRecipeHandler extends TemplateRecipeHandler implements ICom
guiGui = new LinkedList<Class<? extends GuiContainer>>();
transferRects.add(new RecipeTransferRect(new Rectangle(138 - 1 - 36 - 27, 23, 36, 18), "refinery"));
transferRectsGui.add(new RecipeTransferRect(new Rectangle(48, 5, 31, 101), "refinery"));
transferRectsGui.add(new RecipeTransferRect(new Rectangle(34, 34, 14, 34), "refinery"));
guiGui.add(GUIMachineRefinery.class);
RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects);
RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui);

View File

@ -15,29 +15,33 @@ import net.minecraft.item.ItemStack;
public class ContainerCentrifuge extends Container {
private TileEntityMachineCentrifuge diFurnace;
private TileEntityMachineCentrifuge centrifuge;
public ContainerCentrifuge(InventoryPlayer invPlayer, TileEntityMachineCentrifuge tedf) {
diFurnace = tedf;
this.centrifuge = tedf;
this.addSlotToContainer(new Slot(tedf, 0, 36, 50));
this.addSlotToContainer(new Slot(tedf, 1, 9, 50));
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 2, 63, 50));
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 3, 83, 50));
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 4, 103, 50));
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 5, 123, 50));
this.addSlotToContainer(new SlotUpgrade(tedf, 6, 149, 22));
this.addSlotToContainer(new SlotUpgrade(tedf, 7, 149, 40));
// Input
this.addSlotToContainer(new Slot(tedf, 0, 44, 57));
// Battery
this.addSlotToContainer(new Slot(tedf, 1, 8, 57));
// Outputs
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 2, 70, 57));
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 3, 90, 57));
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 4, 110, 57));
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 5, 130, 57));
// Upgrades
this.addSlotToContainer(new SlotUpgrade(tedf, 6, 156, 31));
this.addSlotToContainer(new SlotUpgrade(tedf, 7, 156, 49));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18));
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 11 + j * 18, 107 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162));
this.addSlotToContainer(new Slot(invPlayer, i, 11 + i * 18, 165));
}
}
@ -83,7 +87,7 @@ public class ContainerCentrifuge extends Container {
@Override
public boolean canInteractWith(EntityPlayer player) {
return diFurnace.isUseableByPlayer(player);
return centrifuge.isUseableByPlayer(player);
}
}

View File

@ -19,40 +19,40 @@ public class ContainerMachineRefinery extends Container {
testNuke = tedf;
//Battery
this.addSlotToContainer(new Slot(tedf, 0, 186, 72));
this.addSlotToContainer(new Slot(tedf, 0, 158, 108));
//Canister Input
this.addSlotToContainer(new Slot(tedf, 1, 8, 99));
this.addSlotToContainer(new Slot(tedf, 1, 12, 90));
//Canister Output
this.addSlotToContainer(new SlotTakeOnly(tedf, 2, 8, 119));
this.addSlotToContainer(new SlotTakeOnly(tedf, 2, 12, 108));
//Heavy Oil Input
this.addSlotToContainer(new Slot(tedf, 3, 86, 99));
this.addSlotToContainer(new Slot(tedf, 3, 64, 90));
//Heavy Oil Output
this.addSlotToContainer(new SlotTakeOnly(tedf, 4, 86, 119));
this.addSlotToContainer(new SlotTakeOnly(tedf, 4, 64, 108));
//Naphtha Input
this.addSlotToContainer(new Slot(tedf, 5, 106, 99));
this.addSlotToContainer(new Slot(tedf, 5, 82, 90));
//Naphtha Output
this.addSlotToContainer(new SlotTakeOnly(tedf, 6, 106, 119));
this.addSlotToContainer(new SlotTakeOnly(tedf, 6, 82, 108));
//Light Oil Input
this.addSlotToContainer(new Slot(tedf, 7, 126, 99));
this.addSlotToContainer(new Slot(tedf, 7, 100, 90));
//Light Oil Output
this.addSlotToContainer(new SlotTakeOnly(tedf, 8, 126, 119));
this.addSlotToContainer(new SlotTakeOnly(tedf, 8, 100, 108));
//Petroleum Input
this.addSlotToContainer(new Slot(tedf, 9, 146, 99));
this.addSlotToContainer(new Slot(tedf, 9, 118, 90));
//Petroleum Output
this.addSlotToContainer(new SlotTakeOnly(tedf, 10, 146, 119));
this.addSlotToContainer(new SlotTakeOnly(tedf, 10, 118, 108));
//Sulfur Output
this.addSlotToContainer(new SlotTakeOnly(tedf, 11, 58, 119));
this.addSlotToContainer(new SlotTakeOnly(tedf, 11, 38, 90));
//Fluid ID
this.addSlotToContainer(new Slot(tedf, 12, 186, 106));
this.addSlotToContainer(new Slot(tedf, 12, 38, 108));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 150 + i * 18));
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 11 + j * 18, 158 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 208));
this.addSlotToContainer(new Slot(invPlayer, i, 11 + i * 18, 216));
}
}

View File

@ -19,14 +19,14 @@ public class ContainerMixer extends Container {
this.mixer = mixer;
// Battery
this.addSlotToContainer(new Slot(mixer, 0, 23, 77));
this.addSlotToContainer(new Slot(mixer, 0, 12, 72));
// Item Input
this.addSlotToContainer(new Slot(mixer, 1, 43, 77));
this.addSlotToContainer(new Slot(mixer, 1, 52, 72));
// Fluid ID
this.addSlotToContainer(new Slot(mixer, 2, 117, 77));
this.addSlotToContainer(new Slot(mixer, 2, 126, 72));
// Upgrades
this.addSlotToContainer(new Slot(mixer, 3, 137, 24));
this.addSlotToContainer(new Slot(mixer, 4, 137, 42));
this.addSlotToContainer(new Slot(mixer, 3, 148, 18));
this.addSlotToContainer(new Slot(mixer, 4, 148, 36));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {

View File

@ -22,11 +22,11 @@ public class ContainerPASource extends Container {
//Battery
this.addSlotToContainer(new Slot(tile, 0, 8, 72));
//Inputs
this.addSlotToContainer(new Slot(tile, 1, 62, 18));
this.addSlotToContainer(new Slot(tile, 2, 80, 18));
this.addSlotToContainer(new Slot(tile, 1, 62, 16));
this.addSlotToContainer(new Slot(tile, 2, 80, 16));
//Containers
this.addSlotToContainer(new SlotTakeOnly(tile, 3, 62, 45));
this.addSlotToContainer(new SlotTakeOnly(tile, 4, 80, 45));
this.addSlotToContainer(new SlotTakeOnly(tile, 3, 62, 43));
this.addSlotToContainer(new SlotTakeOnly(tile, 4, 80, 43));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {

View File

@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerCentrifuge;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineCentrifuge;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
@ -18,25 +19,32 @@ public class GUIMachineCentrifuge extends GuiInfoContainer {
public GUIMachineCentrifuge(InventoryPlayer invPlayer, TileEntityMachineCentrifuge tedf) {
super(new ContainerCentrifuge(invPlayer, tedf));
centrifuge = tedf;
this.xSize = 176;
this.ySize = 186;
this.centrifuge = tedf;
this.xSize = 182;
this.ySize = 189;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 9, guiTop + 13, 16, 34, centrifuge.power, centrifuge.maxPower);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 18, 16, 37, centrifuge.power, centrifuge.maxPower);
String[] upgradeText = new String[4];
upgradeText[0] = I18nUtil.resolveKey("desc.gui.upgrade");
upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed");
upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.power");
upgradeText[3] = I18nUtil.resolveKey("desc.gui.upgrade.overdrive");
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 160, guiTop + 16, 8, 8, mouseX, mouseY, upgradeText);
}
@Override
protected void drawGuiContainerForegroundLayer( int i, int j) {
//String name = this.centrifuge.hasCustomInventoryName() ? this.centrifuge.getInventoryName() : I18n.format(this.centrifuge.getInventoryName());
String name = this.centrifuge.hasCustomInventoryName() ? this.centrifuge.getInventoryName() : I18n.format(this.centrifuge.getInventoryName());
//this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
this.fontRendererObj.drawString(name, this.xSize / 2 + 36 / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 11, this.ySize - 96 + 2, 4210752);
}
@Override
@ -46,8 +54,8 @@ public class GUIMachineCentrifuge extends GuiInfoContainer {
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
if(centrifuge.hasPower()) {
int i1 = (int) centrifuge.getPowerRemainingScaled(35);
drawTexturedModalRect(guiLeft + 9, guiTop + 48 - i1, 176, 35 - i1, 16, i1);
int i1 = (int) centrifuge.getPowerRemainingScaled(37);
drawTexturedModalRect(guiLeft + 8, guiTop + 55 - i1, 182, 37 - i1, 16, i1);
}
if(centrifuge.isProcessing()) {
@ -55,11 +63,13 @@ public class GUIMachineCentrifuge extends GuiInfoContainer {
for(int i = 0; i < 4; i++) {
int h = Math.min(p, 36);
drawTexturedModalRect(guiLeft + 65 + i * 20, guiTop + 50 - h, 176, 71 - h, 12, h);
drawTexturedModalRect(guiLeft + 72 + i * 20, guiTop + 57 - h, 182, 73 - h, 12, h);
p -= h;
if(p <= 0)
break;
}
}
this.drawInfoPanel(guiLeft + 160, guiTop + 16, 8, 8, 8);
}
}

View File

@ -26,53 +26,47 @@ public class GUIMachineRefinery extends GuiInfoContainer {
super(new ContainerMachineRefinery(invPlayer, tedf));
refinery = tedf;
this.xSize = 210;
this.ySize = 231;
this.xSize = 182;
this.ySize = 240;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
refinery.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 30, guiTop + 27, 21, 104); // Render tooltip for column.
refinery.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 86, guiTop + 42, 16, 52);
refinery.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 106, guiTop + 42, 16, 52);
refinery.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 126, guiTop + 42, 16, 52);
refinery.tanks[4].renderTankInfo(this, mouseX, mouseY, guiLeft + 146, guiTop + 42, 16, 52);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 186, guiTop + 18, 16, 52, refinery.power, refinery.maxPower);
refinery.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 12, guiTop + 17, 16, 70); // Render tooltip for column.
refinery.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 64, guiTop + 35, 16, 52);
refinery.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 82, guiTop + 35, 16, 52);
refinery.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 100, guiTop + 35, 16, 52);
refinery.tanks[4].renderTankInfo(this, mouseX, mouseY, guiLeft + 118, guiTop + 35, 16, 52);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 158, guiTop + 18, 16, 88, refinery.power, refinery.maxPower);
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.refinery.hasCustomInventoryName() ? this.refinery.getInventoryName() : I18n.format(this.refinery.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - 34/2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 4, 4210752);
this.fontRendererObj.drawString(name, this.xSize / 2 - 36 / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 11, this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
func_146110_a(guiLeft, guiTop, 0, 0, xSize, ySize, 350, 256);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
// power
int j = (int)refinery.getPowerScaled(50);
func_146110_a(guiLeft + 186, guiTop + 69 - j, 210, 52 - j, 16, j, 350, 256);
int j = (int)refinery.getPowerScaled(88);
drawTexturedModalRect(guiLeft + 158, guiTop + 106 - j, 182, 88 - j, 16, j);
OpenGlHelper.glBlendFunc(770, 771, 1, 0); // default
// input tank
FluidTank inputOil = refinery.tanks[0];
if (inputOil.getFill() != 0) {
int targetHeight = inputOil.getFill() * 101 / inputOil.getMaxFill();
Color color = new Color(inputOil.getTankType().getColor());
GL11.glEnable(GL11.GL_BLEND);
GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F);
func_146110_a(guiLeft + 33, guiTop + 130 - targetHeight, 226, 101 - targetHeight, 16, targetHeight, 350, 256);
GL11.glDisable(GL11.GL_BLEND);
refinery.tanks[0].renderTank(guiLeft + 12, guiTop + 88, this.zLevel, 16, 70);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
}
// fucking kgjhgdfjgdhjfg
@ -84,10 +78,10 @@ public class GUIMachineRefinery extends GuiInfoContainer {
RefineryRecipe recipe = RefineryRecipes.getRefinery(inputOil.getTankType());
if(recipe == null) {
func_146110_a(guiLeft + 52, guiTop + 63, 247, 1, 33, 48, 350, 256);
func_146110_a(guiLeft + 52, guiTop + 32, 247, 50, 66, 52, 350, 256);
func_146110_a(guiLeft + 52, guiTop + 24, 247, 145, 86, 35, 350, 256);
func_146110_a(guiLeft + 36, guiTop + 16, 211, 119, 122, 25, 350, 256);
func_146110_a(guiLeft + 30, guiTop + 30, 0, 248, 43, 4, 256, 256);
func_146110_a(guiLeft + 30, guiTop + 26, 0, 240, 61, 8, 256, 256);
func_146110_a(guiLeft + 30, guiTop + 22, 61, 240, 79, 12, 256, 256);
func_146110_a(guiLeft + 30, guiTop + 18, 140, 240, 97, 16, 256, 256);
} else {
// Heavy Oil Products
@ -95,31 +89,31 @@ public class GUIMachineRefinery extends GuiInfoContainer {
GL11.glEnable(GL11.GL_BLEND);
GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F);
func_146110_a(guiLeft + 52, guiTop + 63, 247, 1, 33, 48, 350, 256);
func_146110_a(guiLeft + 30, guiTop + 30, 0, 248, 43, 4, 256, 256);
// Naphtha Oil Products
color = new Color(recipe.outputs[1].type.getColor());
GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F);
func_146110_a(guiLeft + 52, guiTop + 32, 247, 50, 66, 52, 350, 256);
func_146110_a(guiLeft + 30, guiTop + 26, 0, 240, 61, 8, 256, 256);
// Light Oil Products
color = new Color(recipe.outputs[2].type.getColor());
GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F);
func_146110_a(guiLeft + 52, guiTop + 24, 247, 145, 86, 35, 350, 256);
func_146110_a(guiLeft + 30, guiTop + 22, 61, 240, 79, 12, 256, 256);
// Gaseous Products
color = new Color(recipe.outputs[3].type.getColor());
GL11.glColor4f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F);
func_146110_a(guiLeft + 36, guiTop + 16, 211, 119, 122, 25, 350, 256);
func_146110_a(guiLeft + 30, guiTop + 18, 140, 240, 97, 16, 256, 256);
GL11.glDisable(GL11.GL_BLEND);
GL11.glColor4f(1F, 1F, 1F, 1F);
}
// output tanks
refinery.tanks[1].renderTank(guiLeft + 86, guiTop + 95, this.zLevel, 16, 52);
refinery.tanks[2].renderTank(guiLeft + 106, guiTop + 95, this.zLevel, 16, 52);
refinery.tanks[3].renderTank(guiLeft + 126, guiTop + 95, this.zLevel, 16, 52);
refinery.tanks[4].renderTank(guiLeft + 146, guiTop + 95, this.zLevel, 16, 52);
refinery.tanks[1].renderTank(guiLeft + 64, guiTop + 88, this.zLevel, 16, 52);
refinery.tanks[2].renderTank(guiLeft + 82, guiTop + 88, this.zLevel, 16, 52);
refinery.tanks[3].renderTank(guiLeft + 100, guiTop + 88, this.zLevel, 16, 52);
refinery.tanks[4].renderTank(guiLeft + 118, guiTop + 88, this.zLevel, 16, 52);
}
}

View File

@ -30,10 +30,10 @@ public class GUIMachineSatLinker extends GuiInfoContainer {
super.drawScreen(mouseX, mouseY, f);
String[] chipText = I18nUtil.resolveKeyArray("desc.gui.satlinker.chip");
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28, 16, 16, guiLeft - 8, guiTop + 36 + 16, chipText);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28, 16, 16, guiLeft + 20, guiTop + 28 + 16, chipText);
String[] randomText = I18nUtil.resolveKeyArray("desc.gui.satlinker.random");
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, randomText);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 12, guiTop + 28 + 16, 16, 16, guiLeft + 20, guiTop + 28 + 32, randomText);
}
@Override

View File

@ -12,6 +12,7 @@ import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.tileentity.machine.TileEntityMachineMixer;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
@ -28,8 +29,8 @@ public class GUIMixer extends GuiInfoContainer {
public GUIMixer(InventoryPlayer player, TileEntityMachineMixer mixer) {
super(new ContainerMixer(player, mixer));
this.mixer = mixer;
this.mixer = mixer;
this.xSize = 176;
this.ySize = 204;
}
@ -38,7 +39,14 @@ public class GUIMixer extends GuiInfoContainer {
public void drawScreen(int x, int y, float interp) {
super.drawScreen(x, y, interp);
this.drawElectricityInfo(this, x, y, guiLeft + 23, guiTop + 23, 16, 52, mixer.getPower(), mixer.getMaxPower());
this.drawElectricityInfo(this, x, y, guiLeft + 12, guiTop + 18, 16, 52, mixer.getPower(), mixer.getMaxPower());
String[] upgradeText = new String[4];
upgradeText[0] = I18nUtil.resolveKey("desc.gui.upgrade");
upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed");
upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.power");
upgradeText[3] = I18nUtil.resolveKey("desc.gui.upgrade.overdrive");
this.drawCustomInfoStat(x, y, guiLeft + 152, guiTop + 55, 8, 8, x, y, upgradeText);
MixerRecipe[] recipes = MixerRecipes.getOutput(mixer.tanks[2].getTankType());
@ -50,19 +58,19 @@ public class GUIMixer extends GuiInfoContainer {
if(recipe.input2 != null) label.add("-" + recipe.input2.type.getLocalizedName());
if(recipe.solidInput != null) label.add("-" + recipe.solidInput.extractForCyclingDisplay(20).getDisplayName());
label.add(EnumChatFormatting.RED + "Click to change!");
this.drawCustomInfoStat(x, y, guiLeft + 62, guiTop + 22, 12, 12, x, y, label);
this.drawCustomInfoStat(x, y, guiLeft + 71, guiTop + 17, 12, 12, x, y, label);
}
mixer.tanks[0].renderTankInfo(this, x, y, guiLeft + 43, guiTop + 23, 7, 52);
mixer.tanks[1].renderTankInfo(this, x, y, guiLeft + 52, guiTop + 23, 7, 52);
mixer.tanks[2].renderTankInfo(this, x, y, guiLeft + 117, guiTop + 23, 16, 52);
mixer.tanks[0].renderTankInfo(this, x, y, guiLeft + 52, guiTop + 18, 7, 52);
mixer.tanks[1].renderTankInfo(this, x, y, guiLeft + 61, guiTop + 18, 7, 52);
mixer.tanks[2].renderTankInfo(this, x, y, guiLeft + 126, guiTop + 18, 16, 52);
}
@Override
protected void mouseClicked(int x, int y, int i) {
super.mouseClicked(x, y, i);
if(guiLeft + 62 <= x && guiLeft + 62 + 12 > x && guiTop + 22 < y && guiTop + 22 + 12 >= y) {
if(guiLeft + 71 <= x && guiLeft + 71 + 12 > x && guiTop + 17 < y && guiTop + 17 + 12 >= y) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
NBTTagCompound data = new NBTTagCompound();
@ -73,9 +81,9 @@ public class GUIMixer extends GuiInfoContainer {
@Override
protected void drawGuiContainerForegroundLayer( int i, int j) {
String name = this.mixer.hasCustomInventoryName() ? this.mixer.getInventoryName() : I18n.format(this.mixer.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(name, this.xSize / 2 + 40 / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@ -85,16 +93,18 @@ public class GUIMixer extends GuiInfoContainer {
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int i = (int) (mixer.getPower() * 53 / mixer.getMaxPower());
drawTexturedModalRect(guiLeft + 23, guiTop + 75 - i, 176, 52 - i, 16, i);
int i = (int) (mixer.getPower() * 52 / mixer.getMaxPower());
drawTexturedModalRect(guiLeft + 12, guiTop + 70 - i, 176, 52 - i, 16, i);
if(mixer.processTime > 0 && mixer.progress > 0) {
int j = mixer.progress * 53 / mixer.processTime;
drawTexturedModalRect(guiLeft + 62, guiTop + 36, 192, 0, j, 44);
int j = mixer.progress * 52 / mixer.processTime;
drawTexturedModalRect(guiLeft + 71, guiTop + 31, 192, 0, j, 44);
}
mixer.tanks[0].renderTank(guiLeft + 43, guiTop + 75, this.zLevel, 7, 52);
mixer.tanks[1].renderTank(guiLeft + 52, guiTop + 75, this.zLevel, 7, 52);
mixer.tanks[2].renderTank(guiLeft + 117, guiTop + 75, this.zLevel, 16, 52);
mixer.tanks[0].renderTank(guiLeft + 52, guiTop + 70, this.zLevel, 7, 52);
mixer.tanks[1].renderTank(guiLeft + 61, guiTop + 70, this.zLevel, 7, 52);
mixer.tanks[2].renderTank(guiLeft + 126, guiTop + 70, this.zLevel, 16, 52);
this.drawInfoPanel(guiLeft + 152, guiTop + 55, 8, 8, 8);
}
}

View File

@ -38,7 +38,7 @@ public class GUIPADetector extends GuiInfoContainer {
protected void drawGuiContainerForegroundLayer( int i, int j) {
String name = this.source.hasCustomInventoryName() ? this.source.getInventoryName() : I18n.format(this.source.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 9, 4, 4210752);
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 8, 5, 0xffffff);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
this.fontRendererObj.drawString(EnumChatFormatting.AQUA + "/123K", 136, 22, 4210752);
@ -57,8 +57,8 @@ public class GUIPADetector extends GuiInfoContainer {
drawTexturedModalRect(guiLeft + 8, guiTop + 70 - j, 184, 52 - j, 16, j);
int heat = (int) Math.ceil(source.temperature);
if(heat <= 123) drawTexturedModalRect(guiLeft + 44, guiTop + 18, 176, 8, 8, 8);
if(source.power >= source.usage) drawTexturedModalRect(guiLeft + 44, guiTop + 43, 176, 8, 8, 8);
if(heat <= 123) drawTexturedModalRect(guiLeft + 43, guiTop + 18, 176, 8, 8, 8);
if(source.power >= source.usage) drawTexturedModalRect(guiLeft + 43, guiTop + 43, 176, 8, 8, 8);
source.coolantTanks[0].renderTank(guiLeft + 134, guiTop + 88, this.zLevel, 16, 52);
source.coolantTanks[1].renderTank(guiLeft + 152, guiTop + 88, this.zLevel, 16, 52);

View File

@ -4,8 +4,10 @@ import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerPAQuadrupole;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemPACoil.EnumCoilType;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.albion.TileEntityPAQuadrupole;
import com.hbm.util.EnumUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
@ -39,7 +41,7 @@ public class GUIPAQuadrupole extends GuiInfoContainer {
protected void drawGuiContainerForegroundLayer( int i, int j) {
String name = this.quadrupole.hasCustomInventoryName() ? this.quadrupole.getInventoryName() : I18n.format(this.quadrupole.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 9, 6, 4210752);
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 9, 6, 0xffffff);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
this.fontRendererObj.drawString(EnumChatFormatting.AQUA + "/123K", 118, 22, 4210752);
@ -59,9 +61,16 @@ public class GUIPAQuadrupole extends GuiInfoContainer {
int heat = (int) Math.ceil(quadrupole.temperature);
if(heat <= 123) drawTexturedModalRect(guiLeft + 75, guiTop + 64, 176, 8, 8, 8);
if(quadrupole.slots[1] != null && quadrupole.slots[1].getItem() == ModItems.pa_coil) drawTexturedModalRect(guiLeft + 85, guiTop + 64, 176, 8, 8, 8);
if(quadrupole.slots[1] != null && quadrupole.slots[1].getItem() == ModItems.pa_coil){
drawTexturedModalRect(guiLeft + 85, guiTop + 64, 176, 8, 8, 8);
EnumCoilType type = null;
type = EnumUtil.grabEnumSafely(EnumCoilType.class, quadrupole.slots[1].getItemDamage());
if (type == EnumCoilType.GOLD) drawTexturedModalRect(guiLeft + 65, guiTop + 30, 200, 0, 28, 28);
if (type == EnumCoilType.NIOBIUM) drawTexturedModalRect(guiLeft + 65, guiTop + 30, 228, 0, 28, 28);
if (type == EnumCoilType.BSCCO) drawTexturedModalRect(guiLeft + 65, guiTop + 30, 200, 28, 28, 28);
if (type == EnumCoilType.CHLOROPHYTE) drawTexturedModalRect(guiLeft + 65, guiTop + 30, 228, 28, 28, 28);
}
if(quadrupole.power >= quadrupole.usage) drawTexturedModalRect(guiLeft + 65, guiTop + 64, 176, 8, 8, 8);
quadrupole.coolantTanks[0].renderTank(guiLeft + 116, guiTop + 88, this.zLevel, 16, 52);
quadrupole.coolantTanks[1].renderTank(guiLeft + 134, guiTop + 88, this.zLevel, 16, 52);
}

View File

@ -46,15 +46,15 @@ public class GUIPASource extends GuiInfoContainer {
info.add(EnumChatFormatting.BLUE + "Last momentum: " + EnumChatFormatting.RESET + String.format(Locale.US, "%,d", source.lastSpeed));
String[] message = I18nUtil.resolveKeyArray("pa." + this.source.state.name().toLowerCase(Locale.US) + ".desc");
for(String s : message) info.add(EnumChatFormatting.YELLOW + s);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 105, guiTop + 18, 10, 10, mouseX, mouseY, info);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 105, guiTop + 30, 10, 10, mouseX, mouseY, EnumChatFormatting.RED + "Cancel operation");
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 105, guiTop + 16, 10, 10, mouseX, mouseY, info);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 105, guiTop + 28, 10, 10, mouseX, mouseY, EnumChatFormatting.RED + "Cancel operation");
}
@Override
protected void mouseClicked(int x, int y, int i) {
super.mouseClicked(x, y, i);
if(guiLeft + 105 <= x && guiLeft + 105 + 10 > x && guiTop + 30 < y && guiTop + 30 + 10 >= y) {
if(guiLeft + 105 <= x && guiLeft + 105 + 10 > x && guiTop + 28 < y && guiTop + 28 + 10 >= y) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
NBTTagCompound data = new NBTTagCompound();
data.setBoolean("cancel", true);
@ -66,7 +66,7 @@ public class GUIPASource extends GuiInfoContainer {
protected void drawGuiContainerForegroundLayer( int i, int j) {
String name = this.source.hasCustomInventoryName() ? this.source.getInventoryName() : I18n.format(this.source.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 9, 4, 4210752);
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 9, 4, 0xffffff);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
this.fontRendererObj.drawString(EnumChatFormatting.AQUA + "/123K", 136, 22, 4210752);
@ -88,8 +88,8 @@ public class GUIPASource extends GuiInfoContainer {
drawTexturedModalRect(guiLeft + 8, guiTop + 70 - j, 184, 52 - j, 16, j);
int heat = (int) Math.ceil(source.temperature);
if(heat <= 123) drawTexturedModalRect(guiLeft + 44, guiTop + 18, 176, 8, 8, 8);
if(source.power >= source.usage) drawTexturedModalRect(guiLeft + 44, guiTop + 43, 176, 8, 8, 8);
if(heat <= 123) drawTexturedModalRect(guiLeft + 44, guiTop + 16, 176, 8, 8, 8);
if(source.power >= source.usage) drawTexturedModalRect(guiLeft + 44, guiTop + 41, 176, 8, 8, 8);
int color = source.state.color;
float red = (color & 0xff0000) >> 16;

View File

@ -4,19 +4,18 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import com.hbm.items.ISatChip;
import com.hbm.items.tool.ItemSatInterface;
import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.SatCoordPacket;
import com.hbm.saveddata.satellites.Satellite.CoordActions;
import com.hbm.saveddata.satellites.Satellite.Interfaces;
import com.hbm.packet.toserver.NBTItemControlPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
public class GUIScreenSatCoord extends GuiScreen {
@ -27,14 +26,15 @@ public class GUIScreenSatCoord extends GuiScreen {
protected int guiLeft;
protected int guiTop;
private final EntityPlayer player;
protected ItemStack device;
private GuiTextField xField;
private GuiTextField yField;
private GuiTextField zField;
public GUIScreenSatCoord(EntityPlayer player) {
this.player = player;
this.device = player.getHeldItem();
}
public void initGui() {
@ -63,11 +63,9 @@ public class GUIScreenSatCoord extends GuiScreen {
protected void mouseClicked(int i, int j, int k) {
super.mouseClicked(i, j, k);
if(ItemSatInterface.currentSat == null)
return;
if(!device.hasTagCompound() || !device.stackTagCompound.getBoolean(ItemSatInterface.KEY_NBT_CONNECTED)) return;
this.xField.mouseClicked(i, j, k);
if(ItemSatInterface.currentSat.coordAcs.contains(CoordActions.HAS_Y))
this.yField.mouseClicked(i, j, k);
this.zField.mouseClicked(i, j, k);
@ -75,26 +73,15 @@ public class GUIScreenSatCoord extends GuiScreen {
if(NumberUtils.isNumber(xField.getText()) && NumberUtils.isNumber(zField.getText())) {
if(ItemSatInterface.currentSat.coordAcs.contains(CoordActions.HAS_Y)) {
if(NumberUtils.isNumber(yField.getText())) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBleep"), 1.0F));
PacketDispatcher.wrapper.sendToServer(new SatCoordPacket((int) Double.parseDouble(xField.getText()), (int) Double.parseDouble(yField.getText()),
(int) Double.parseDouble(zField.getText()), ISatChip.getFreqS(player.getHeldItem())));
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
NBTTagCompound data = new NBTTagCompound();
data.setInteger("x", (int) Double.parseDouble(xField.getText()));
data.setInteger("z", (int) Double.parseDouble(zField.getText()));
if(NumberUtils.isNumber(yField.getText())) data.setInteger("y", (int) Double.parseDouble(yField.getText()));
PacketDispatcher.wrapper.sendToServer(new NBTItemControlPacket(data));
this.mc.thePlayer.closeScreen();
}
} else {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBleep"), 1.0F));
PacketDispatcher.wrapper
.sendToServer(new SatCoordPacket((int) Double.parseDouble(xField.getText()), 0, (int) Double.parseDouble(zField.getText()), ISatChip.getFreqS(player.getHeldItem())));
this.mc.thePlayer.closeScreen();
}
}
}
}
@ -108,15 +95,9 @@ public class GUIScreenSatCoord extends GuiScreen {
GL11.glEnable(GL11.GL_LIGHTING);
}
@Override
public boolean doesGuiPauseGame() {
return false;
}
protected void drawGuiContainerForegroundLayer(int i, int j) {
this.xField.drawTextBox();
if(ItemSatInterface.currentSat != null && ItemSatInterface.currentSat.coordAcs.contains(CoordActions.HAS_Y))
this.yField.drawTextBox();
this.zField.drawTextBox();
}
@ -126,48 +107,34 @@ public class GUIScreenSatCoord extends GuiScreen {
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
if(xField.isFocused())
drawTexturedModalRect(guiLeft + 61, guiTop + 16, 0, 126, 54, 18);
if(xField.isFocused()) drawTexturedModalRect(guiLeft + 61, guiTop + 16, 0, 126, 54, 18);
if(yField.isFocused()) drawTexturedModalRect(guiLeft + 61, guiTop + 52, 0, 126, 54, 18);
if(zField.isFocused()) drawTexturedModalRect(guiLeft + 61, guiTop + 88, 0, 126, 54, 18);
if(yField.isFocused())
drawTexturedModalRect(guiLeft + 61, guiTop + 52, 0, 126, 54, 18);
if(zField.isFocused())
drawTexturedModalRect(guiLeft + 61, guiTop + 88, 0, 126, 54, 18);
if(ItemSatInterface.currentSat != null) {
if(!ItemSatInterface.currentSat.coordAcs.contains(CoordActions.HAS_Y))
drawTexturedModalRect(guiLeft + 61, guiTop + 52, 0, 144, 54, 18);
if(device.hasTagCompound() && device.stackTagCompound.getBoolean(ItemSatInterface.KEY_NBT_CONNECTED)) {
drawTexturedModalRect(guiLeft + 120, guiTop + 17, 194, 0, 7, 7);
if(ItemSatInterface.currentSat.satIface == Interfaces.SAT_COORD) {
drawTexturedModalRect(guiLeft + 120, guiTop + 25, 194, 0, 7, 7);
}
}
@Override
protected void keyTyped(char c, int k) {
if(this.xField.textboxKeyTyped(c, k)) return;
if(this.yField.textboxKeyTyped(c, k)) return;
if(this.zField.textboxKeyTyped(c, k)) return;
super.keyTyped(c, k);
}
protected void keyTyped(char p_73869_1_, int p_73869_2_) {
if(this.xField.textboxKeyTyped(p_73869_1_, p_73869_2_)) {
} else if(ItemSatInterface.currentSat != null && ItemSatInterface.currentSat.coordAcs.contains(CoordActions.HAS_Y) && this.yField.textboxKeyTyped(p_73869_1_, p_73869_2_)) {
} else if(this.zField.textboxKeyTyped(p_73869_1_, p_73869_2_)) {
} else {
super.keyTyped(p_73869_1_, p_73869_2_);
}
if(p_73869_2_ == 1 || p_73869_2_ == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
this.mc.thePlayer.closeScreen();
}
@Override
public boolean doesGuiPauseGame() {
return false;
}
@Override
public void onGuiClosed() {
Keyboard.enableRepeatEvents(false);
}
}

View File

@ -1,330 +0,0 @@
package com.hbm.inventory.gui;
import java.util.Arrays;
import java.util.List;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.recipes.MachineRecipes;
import com.hbm.items.ISatChip;
import com.hbm.items.tool.ItemSatInterface;
import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.SatLaserPacket;
import com.hbm.saveddata.satellites.Satellite.InterfaceActions;
import com.hbm.saveddata.satellites.Satellite.Interfaces;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.Entity;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public class GUIScreenSatInterface extends GuiScreen {
protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/satellites/gui_sat_interface.png");
protected int xSize = 216;
protected int ySize = 216;
protected int guiLeft;
protected int guiTop;
private final EntityPlayer player;
int x;
int z;
public GUIScreenSatInterface(EntityPlayer player) {
this.player = player;
}
public void updateScreen() {
}
protected void mouseClicked(int i, int j, int k) {
if(ItemSatInterface.currentSat != null && ItemSatInterface.currentSat.ifaceAcs.contains(InterfaceActions.CAN_CLICK)) {
if(i >= this.guiLeft + 8 && i < this.guiLeft + 208 && j >= this.guiTop + 8 && j < this.guiTop + 208 && player != null) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:item.techBleep"), 1.0F));
int x = this.x - guiLeft + i - 8 - 100;
int z = this.z - guiTop + j - 8 - 100;
PacketDispatcher.wrapper.sendToServer(new SatLaserPacket(x, z, ISatChip.getFreqS(player.getHeldItem())));
}
}
}
public void drawScreen(int mouseX, int mouseY, float f)
{
this.drawDefaultBackground();
this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
GL11.glDisable(GL11.GL_LIGHTING);
this.drawGuiContainerForegroundLayer(mouseX, mouseY);
GL11.glEnable(GL11.GL_LIGHTING);
}
public void initGui()
{
super.initGui();
this.guiLeft = (this.width - this.xSize) / 2;
this.guiTop = (this.height - this.ySize) / 2;
x = (int) player.posX;
z = (int) player.posZ;
}
@Override
public boolean doesGuiPauseGame() {
return false;
}
protected void drawGuiContainerForegroundLayer(int i, int j) {
if(ItemSatInterface.currentSat != null && ItemSatInterface.currentSat.ifaceAcs.contains(InterfaceActions.SHOW_COORDS)) {
if(i >= this.guiLeft + 8 && i < this.guiLeft + 208 && j >= this.guiTop + 8 && j < this.guiTop + 208 && player != null) {
int x = this.x - guiLeft + i - 8 - 100;
int z = this.z - guiTop + j - 8 - 100;
func_146283_a(Arrays.asList(new String[] { x + " / " + z }), i, j);
}
}
}
protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
if(ItemSatInterface.currentSat == null) {
drawNotConnected();
} else {
if(ItemSatInterface.currentSat.satIface != Interfaces.SAT_PANEL) {
drawNoService();
return;
}
if(ItemSatInterface.currentSat.ifaceAcs.contains(InterfaceActions.HAS_MAP)) {
drawMap();
}
if(ItemSatInterface.currentSat.ifaceAcs.contains(InterfaceActions.HAS_ORES)) {
drawScan();
}
if(ItemSatInterface.currentSat.ifaceAcs.contains(InterfaceActions.HAS_RADAR)) {
drawRadar();
}
}
}
private int scanPos = 0;
private long lastMilli = 0;
private void progresScan() {
if(lastMilli + 25 < System.currentTimeMillis()) {
lastMilli = System.currentTimeMillis();
scanPos++;
}
if(scanPos >= 200)
scanPos -= 200;
}
private int[][] map = new int[200][200];
private void drawMap() {
World world = player.worldObj;
for(int i = -100; i < 100; i++) {
int x = this.x + i;
int z = this.z + scanPos - 100;
int y = world.getHeightValue(x, z) - 1;
map[i + 100][scanPos] = world.getBlock(x, y, z).getMaterial().getMaterialMapColor().colorValue;
}
prontMap();
progresScan();
}
private void drawScan() {
World world = player.worldObj;
for(int i = -100; i < 100; i++) {
int x = this.x + i;
int z = this.z + scanPos - 100;
for(int j = 255; j >= 0; j--) {
int c = getColorFromBlock(new ItemStack(world.getBlock(x, j, z), 1, world.getBlockMetadata(x, j, z)));
if(c != 0) {
map[i + 100][scanPos] = c;
break;
}
}
}
prontMap();
progresScan();
}
private int getColorFromBlock(ItemStack stack) {
if(stack == null || stack.getItem() == null/* || stack.getItemDamage() < 0*/)
return 0;
if(MachineRecipes.mODE(stack, "oreCoal"))
return 0x333333;
if(MachineRecipes.mODE(stack, "oreIron"))
return 0xb2aa92;
if(MachineRecipes.mODE(stack, "oreGold"))
return 0xffe460;
if(MachineRecipes.mODE(stack, "oreSilver"))
return 0xe5e5e5;
if(MachineRecipes.mODE(stack, "oreDiamond"))
return 0x6ed5ef;
if(MachineRecipes.mODE(stack, "oreEmerald"))
return 0x6cf756;
if(MachineRecipes.mODE(stack, "oreLapis"))
return 0x092f7a;
if(MachineRecipes.mODE(stack, "oreRedstone"))
return 0xe50000;
if(MachineRecipes.mODE(stack, "oreTin"))
return 0xa09797;
if(MachineRecipes.mODE(stack, "oreCopper"))
return 0xd16208;
if(MachineRecipes.mODE(stack, "oreLead"))
return 0x384b68;
if(MachineRecipes.mODE(stack, "oreAluminum"))
return 0xdbdbdb;
if(MachineRecipes.mODE(stack, "oreTungsten"))
return 0x333333;
if(MachineRecipes.mODE(stack, "oreTitanium"))
return 0xDDDDDD;
if(MachineRecipes.mODE(stack, "oreUranium"))
return 0x3e4f3c;
if(MachineRecipes.mODE(stack, "oreBeryllium"))
return 0x8e8d7d;
if(MachineRecipes.mODE(stack, "oreSulfur"))
return 0x9b9309;
if(MachineRecipes.mODE(stack, "oreSalpeter") || MachineRecipes.mODE(stack, "oreNiter"))
return 0xa5a09d;
if(MachineRecipes.mODE(stack, "oreFluorite"))
return 0xffffff;
if(MachineRecipes.mODE(stack, "oreSchrabidium"))
return 0x1cffff;
if(MachineRecipes.mODE(stack, "oreRareEarth"))
return 0xffcc99;
return isOre(stack) ? 0xBA00AF : 0x000000;
}
private static boolean isOre(ItemStack stack) {
int[] ids = OreDictionary.getOreIDs(new ItemStack(stack.getItem(), 1, stack.getItemDamage()));
for(int i = 0; i < ids.length; i++) {
String s = OreDictionary.getOreName(ids[i]);
if(s.length() > 3 && s.substring(0, 3).equals("ore"))
return true;
}
return false;
}
private void drawRadar() {
List<Entity> entities = player.worldObj.getEntitiesWithinAABBExcludingEntity(player, AxisAlignedBB.getBoundingBox(player.posX - 100, 0, player.posZ - 100, player.posX + 100, 5000, player.posZ + 100));
if(!entities.isEmpty()) {
for(Entity e : entities) {
if(e.width * e.width * e.height >= 0.5D) {
int x = (int)((e.posX - this.x) / ((double)100 * 2 + 1) * (200D - 8D)) - 4;
int z = (int)((e.posZ - this.z) / ((double)100 * 2 + 1) * (200D - 8D)) - 4 - 9;
int t = 5;
//TODO: fix radar screen implementation
/*if(e instanceof EntityMissileBaseAdvanced) {
t = ((EntityMissileBaseAdvanced)e).getTargetType().ordinal();
}*/
if(e instanceof EntityMob) {
t = 6;
}
if(e instanceof EntityPlayer) {
t = 7;
}
drawTexturedModalRect(guiLeft + 108 + x, guiTop + 117 + z, 216, 8 * t, 8, 8);
}
}
}
}
private void prontMap() {
for(int x = 0; x < 200; x++) {
for(int z = 0; z < 200; z++) {
if(map[x][z] != 0) {
GL11.glColor3ub((byte)((map[x][z] & 0xFF0000) >> 16), (byte)((map[x][z] & 0x00FF00) >> 8), (byte)(map[x][z] & 0x0000FF));
drawTexturedModalRect(guiLeft + 8 + x, guiTop + 8 + z, 216, 216, 1, 1);
}
}
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
private void drawNoService() {
drawTexturedModalRect((this.width - 77) / 2, (this.height - 12) / 2, 0, 228, 77, 12);
}
private void drawNotConnected() {
drawTexturedModalRect((this.width - 121) / 2, (this.height - 12) / 2, 0, 216, 121, 12);
}
protected void keyTyped(char p_73869_1_, int p_73869_2_)
{
if (p_73869_2_ == 1 || p_73869_2_ == this.mc.gameSettings.keyBindInventory.getKeyCode())
{
this.mc.thePlayer.closeScreen();
}
if (p_73869_2_ == this.mc.gameSettings.keyBindForward.getKeyCode())
{
this.z -= 50;
map = new int[200][200];
}
if (p_73869_2_ == this.mc.gameSettings.keyBindBack.getKeyCode())
{
this.z += 50;
map = new int[200][200];
}
if (p_73869_2_ == this.mc.gameSettings.keyBindLeft.getKeyCode())
{
this.x -= 50;
map = new int[200][200];
}
if (p_73869_2_ == this.mc.gameSettings.keyBindRight.getKeyCode())
{
this.x += 50;
map = new int[200][200];
}
}
}

View File

@ -111,12 +111,6 @@ public class ArcWelderRecipes extends SerializableRecipe {
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_nuclear), 600, 50_000L, new ComparableStack(ModItems.warhead_nuclear), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large, 3)));
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_nuclear_cluster), 600, 50_000L, new ComparableStack(ModItems.warhead_mirv), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large, 3)));
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_volcano), 600, 50_000L, new ComparableStack(ModItems.warhead_volcano), new ComparableStack(ModItems.fuel_tank_large), new ComparableStack(ModItems.thruster_large, 3)));
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.sat_mapper), 600, 10_000L, new ComparableStack(ModItems.sat_base), new ComparableStack(ModItems.sat_head_mapper)));
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.sat_scanner), 600, 10_000L, new ComparableStack(ModItems.sat_base), new ComparableStack(ModItems.sat_head_scanner)));
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.sat_radar), 600, 10_000L, new ComparableStack(ModItems.sat_base), new ComparableStack(ModItems.sat_head_radar)));
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.sat_laser), 600, 50_000L, new ComparableStack(ModItems.sat_base), new ComparableStack(ModItems.sat_head_laser)));
recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.sat_resonator), 600, 50_000L, new ComparableStack(ModItems.sat_base), new ComparableStack(ModItems.sat_head_resonator)));
}
public static HashMap getRecipes() {

View File

@ -32,6 +32,7 @@ import com.hbm.items.machine.ItemDrillbit.EnumDrillType;
import com.hbm.items.machine.ItemPACoil.EnumCoilType;
import com.hbm.items.machine.ItemPileRodMK2.EnumPileRod;
import com.hbm.items.machine.ItemPistons.EnumPistonType;
import com.hbm.items.special.ItemSatellite.EnumSatType;
import com.hbm.items.weapon.ItemAmmoHIMARS;
import com.hbm.items.weapon.grenade.ItemGrenadeFuze.EnumGrenadeFuze;
import com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell;
@ -171,10 +172,6 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
.inputItems(new OreDictStack(ZR.billet(), 1)).setGroup(autoPileRod, INSTANCE));
this.register(new GenericRecipe("ass.pilenu").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.NU.ordinal()))
.inputItems(new OreDictStack(U.billet(), 3)).setGroup(autoPileRod, INSTANCE));
this.register(new GenericRecipe("ass.pilepu239").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PU239.ordinal()))
.inputItems(new OreDictStack(PU239.billet(), 3)).setGroup(autoPileRod, INSTANCE));
this.register(new GenericRecipe("ass.pilergp").setup(40, 200).outputItems(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RGP.ordinal()))
.inputItems(new OreDictStack(PURG.billet(), 3)).setGroup(autoPileRod, INSTANCE));
// powders
String autoCyclotron = "autoswitch.cyclotron";
@ -946,13 +943,13 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
.inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4_000)));
// space
this.register(new GenericRecipe("ass.soyuzcore").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.struct_soyuz_core, 1))
this.register(new GenericRecipe("ass.soyuzcore").setup(1_200, 25_000).outputItems(new ItemStack(ModBlocks.struct_soyuz_core, 1))
.inputItems(new OreDictStack(STEEL.plateWelded(), 16),
new ComparableStack(ModItems.upgrade_speed_3),
new ComparableStack(ModItems.upgrade_power_3),
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "soyuz"));
this.register(new GenericRecipe("ass.soyuz").setup(6_000, 100).outputItems(new ItemStack(ModItems.missile_soyuz, 1))
this.register(new GenericRecipe("ass.soyuz").setup(6_000, 25_000).outputItems(new ItemStack(ModItems.missile_soyuz, 1))
.inputItems(new OreDictStack(TI.shell(), 32),
new OreDictStack(RUBBER.ingot(), 64),
new ComparableStack(ModItems.rocket_fuel, 64),
@ -960,84 +957,76 @@ public class AssemblyMachineRecipes extends GenericRecipes<GenericRecipe> {
new ComparableStack(ModItems.thruster_medium, 12),
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER),
new ComparableStack(ModItems.part_generic, 32, EnumPartType.LDE)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "soyuz"));
this.register(new GenericRecipe("ass.lander").setup(2_400, 100).outputItems(new ItemStack(ModItems.missile_soyuz_lander, 1))
this.register(new GenericRecipe("ass.lander").setup(2_400, 25_000).outputItems(new ItemStack(ModItems.missile_soyuz_lander, 1))
.inputItems(new OreDictStack(AL.shell(), 4),
new OreDictStack(RUBBER.ingot(), 16),
new ComparableStack(ModItems.rocket_fuel, 16),
new ComparableStack(ModItems.thruster_small, 3),
new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER_ADVANCED),
new ComparableStack(ModItems.part_generic, 12, EnumPartType.LDE)).setPools(GenericRecipes.POOL_PREFIX_DISCOVER + "soyuz"));
this.register(new GenericRecipe("ass.satellitebase").setup(600, 100).outputItems(new ItemStack(ModItems.sat_base, 1))
.inputItems(new OreDictStack(RUBBER.ingot(), 12),
new OreDictStack(TI.shell(), 3),
this.register(new GenericRecipe("ass.spysat").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.SPY.ordinal()))
.inputItems(new OreDictStack(AL.shell(), 16),
new ComparableStack(ModItems.photo_panel, 32),
new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC),
new ComparableStack(ModItems.part_generic, 8, EnumPartType.GLASS_POLARIZED),
new ComparableStack(ModItems.part_generic, 16, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER)));
this.register(new GenericRecipe("ass.scansat").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.SCANNER.ordinal()))
.inputItems(new OreDictStack(AL.shell(), 16),
new ComparableStack(ModItems.photo_panel, 32),
new OreDictStack(GOLD.wireDense(), 32),
new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID),
new ComparableStack(ModItems.part_generic, 16, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER)));
this.register(new GenericRecipe("ass.radarsat").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.RADAR.ordinal()))
.inputItems(new OreDictStack(GOLD.plateCast(), 16),
new ComparableStack(ModItems.photo_panel, 32),
new ComparableStack(ModItems.magnetron, 32),
new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID),
new ComparableStack(ModItems.part_generic, 4, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER)));
this.register(new GenericRecipe("ass.astrominer").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.MINER_ASTRO.ordinal()))
.inputItems(new OreDictStack(BIGMT.plateCast(), 16),
new ComparableStack(ModItems.photo_panel, 8),
new ComparableStack(ModItems.thruster_medium, 1),
new ComparableStack(ModItems.part_generic, 8, EnumPartType.LDE),
new ComparableStack(ModItems.plate_desh, 4),
new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()),
new ComparableStack(ModItems.photo_panel, 24),
new ComparableStack(ModItems.circuit, 12, EnumCircuitType.BASIC),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM)));
this.register(new GenericRecipe("ass.satellitemapper").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_mapper, 1))
.inputItems(new OreDictStack(STEEL.shell(), 3),
new ComparableStack(ModItems.plate_desh, 4),
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED),
new ComparableStack(ModBlocks.glass_quartz, 8)));
this.register(new GenericRecipe("ass.satellitescanner").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_scanner, 1))
.inputItems(new OreDictStack(STEEL.shell(), 3),
new OreDictStack(TI.plateCast(), 8),
new ComparableStack(ModItems.plate_desh, 4),
new ComparableStack(ModItems.magnetron, 8),
new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED.ordinal())));
this.register(new GenericRecipe("ass.satelliteradar").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_radar, 1))
.inputItems(new OreDictStack(STEEL.shell(), 3),
new OreDictStack(TI.plateCast(), 12),
new ComparableStack(ModItems.magnetron, 12),
new ComparableStack(ModItems.coil_gold, 16),
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.ADVANCED.ordinal())));
this.register(new GenericRecipe("ass.satellitelaser").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_laser, 1))
.inputItems(new OreDictStack(STEEL.shell(), 6),
new OreDictStack(CU.plateCast(), 24),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 16),
new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_ADVANCED),
new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD),
new ComparableStack(ModItems.crystal_diamond, 8),
new ComparableStack(ModBlocks.glass_quartz, 8)));
this.register(new GenericRecipe("ass.satelliteresonator").setup(600, 100).outputItems(new ItemStack(ModItems.sat_head_resonator, 1))
.inputItems(new OreDictStack(STEEL.plateCast(), 6),
new OreDictStack(STAR.ingot(), 12),
new OreDictStack(ANY_PLASTIC.ingot(), 48),
new ComparableStack(ModItems.motor_bismuth, 4),
new ComparableStack(ModItems.part_generic, 16, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER_ADVANCED)));
this.register(new GenericRecipe("ass.lunarminer").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.MINER_LUNAR.ordinal()))
.inputItems(new OreDictStack(BIGMT.plateCast(), 16),
new ComparableStack(ModItems.photo_panel, 8),
new ComparableStack(ModItems.thruster_medium, 1),
new ComparableStack(ModItems.motor_bismuth, 4),
new ComparableStack(ModItems.part_generic, 16, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CONTROLLER_ADVANCED)));
this.register(new GenericRecipe("ass.orbitallaser").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.PRECISION_LASER.ordinal()))
.inputItems(new OreDictStack(WEAPONSTEEL.shell(), 16),
new ComparableStack(ModItems.photo_panel, 32),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_TANTALUM),
new ComparableStack(ModItems.crystal_redstone, 16),
new ComparableStack(ModItems.part_generic, 16, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CONTROLLER_ADVANCED)));
this.register(new GenericRecipe("ass.deathray").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.DEATH_RAY.ordinal()))
.inputItems(new OreDictStack(WEAPONSTEEL.shell(), 32),
new OreDictStack(PURG.billet(), 32),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_BISMUTH),
new OreDictStack(EMERALD.gem(), 32),
new ComparableStack(ModItems.part_generic, 16, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 5, EnumCircuitType.CONTROLLER_ADVANCED)));
this.register(new GenericRecipe("ass.xenrelay").setup(1_200, 25_000).outputItems(new ItemStack(ModItems.satellite, 1, EnumSatType.XENIUM_RESONATOR.ordinal()))
.inputItems(new OreDictStack(GOLD.plateCast(), 16),
new ComparableStack(ModItems.photo_panel, 32),
new ComparableStack(ModItems.crystal_xen, 1),
new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED)));
this.register(new GenericRecipe("ass.satelliterelay").setup(600, 100).outputItems(new ItemStack(ModItems.sat_foeq, 1))
.inputItems(new OreDictStack(TI.shell(), 3),
new ComparableStack(ModItems.plate_desh, 8),
new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.HYDROGEN.getID()),
new ComparableStack(ModItems.photo_panel, 16),
new ComparableStack(ModItems.thruster_nuclear, 1),
new ComparableStack(ModItems.ingot_uranium_fuel, 6),
new ComparableStack(ModItems.circuit, 24, EnumCircuitType.BASIC),
new ComparableStack(ModItems.circuit, 24, EnumCircuitType.BISMOID),
new ComparableStack(ModItems.part_generic, 4, EnumPartType.LDE),
new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER_ADVANCED)));
this.register(new GenericRecipe("ass.satlink").setup(100, 1_000).outputItems(new ItemStack(ModBlocks.machine_satlink))
.inputItems(new ComparableStack(ModBlocks.steel_scaffold, 16),
new OreDictStack(AL.plate(), 16),
new ComparableStack(ModItems.magnetron, 3),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM)));
this.register(new GenericRecipe("ass.satelliteasteroidminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_miner, 1))
.inputItems(new OreDictStack(BIGMT.plate(), 24),
new ComparableStack(ModItems.motor_desh, 2),
new ComparableStack(ModItems.drill_titanium, 2),
new ComparableStack(ModItems.circuit, 12, EnumCircuitType.ADVANCED),
new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()),
new ComparableStack(ModItems.thruster_small, 1),
new ComparableStack(ModItems.photo_panel, 12),
new ComparableStack(ModItems.centrifuge_element, 4),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM)));
this.register(new GenericRecipe("ass.satellitelunarminer").setup(600, 100).outputItems(new ItemStack(ModItems.sat_lunar_miner, 1))
.inputItems(new ComparableStack(ModItems.ingot_meteorite, 4),
new ComparableStack(ModItems.plate_desh, 4),
new ComparableStack(ModItems.motor, 2),
new ComparableStack(ModItems.drill_titanium, 2),
new ComparableStack(ModItems.circuit, 8, EnumCircuitType.ADVANCED),
new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()),
new ComparableStack(ModItems.thruster_small, 1),
new ComparableStack(ModItems.photo_panel, 12),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LITHIUM)));
new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER)));
this.register(new GenericRecipe("ass.nitra").setupNamed(200, 500)
.inputItems(new ComparableStack(ModItems.nitra))

View File

@ -71,7 +71,7 @@ public class PUREXRecipes extends GenericRecipes<PUREXRecipe> {
.inputItems(new ComparableStack(ModItems.pile_rod, 1, EnumPileRod.RGP))
.inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100))
.outputItems(new ItemStack(ModItems.billet_pu_mix, 2),
new ItemStack(ModItems.billet_uranium, 1))
new ItemStack(ModItems.billet_nuclear_waste, 1))
.setIconToFirstIngredient());
this.register((PUREXRecipe) new PUREXRecipe("purex.pilewaste").setup(40, pilePower).setNameWrapper("purex.recycle").setGroup(autoPile, this)
.inputItems(new ComparableStack(ModItems.pile_rod, 1, EnumPileRod.WASTE))

View File

@ -148,6 +148,16 @@ public class SolderingRecipes extends SerializableRecipe {
));
}
recipes.add(new SolderingRecipe(new ItemStack(ModItems.sat_chip), 100, 100,
new AStack[] {
new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CHIP),
new ComparableStack(ModItems.circuit, 2, EnumCircuitType.CAPACITOR)},
new AStack[] {
new ComparableStack(ModItems.circuit, 2, EnumCircuitType.PCB)},
new AStack[] {
new OreDictStack(PB.wireFine(), 4)}
));
/*
* UPGRADES
*/

View File

@ -178,6 +178,7 @@ public class AnvilRecipes extends SerializableRecipe {
new AStack[] {new ComparableStack(Blocks.stonebrick, 16), new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(IRON.ingot(), 8), new OreDictStack(CU.ingot(), 8)},
new AnvilOutput(new ItemStack(ModBlocks.machine_annihilator))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(IRON.plate(), 1), new AnvilOutput(new ItemStack(ModBlocks.platemetal, 4, 0))).setTier(1).setOverlay(OverlayType.CONSTRUCTION));
constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(AL.ingot(), 1), new AnvilOutput(new ItemStack(ModBlocks.deco_aluminium, 4))).setTier(1).setOverlay(OverlayType.CONSTRUCTION));
constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(BE.ingot(), 1), new AnvilOutput(new ItemStack(ModBlocks.deco_beryllium, 4))).setTier(1).setOverlay(OverlayType.CONSTRUCTION));
constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(PB.ingot(), 1), new AnvilOutput(new ItemStack(ModBlocks.deco_lead, 4))).setTier(1).setOverlay(OverlayType.CONSTRUCTION));
@ -658,6 +659,7 @@ public class AnvilRecipes extends SerializableRecipe {
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModBlocks.deco_lead, 4), new AnvilOutput[] {new AnvilOutput(new ItemStack(ModItems.ingot_lead, 1))}).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModBlocks.deco_beryllium, 4), new AnvilOutput[] {new AnvilOutput(new ItemStack(ModItems.ingot_beryllium, 1))}).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModBlocks.deco_asbestos, 4), new AnvilOutput[] {new AnvilOutput(new ItemStack(ModItems.ingot_asbestos, 1))}).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(new ComparableStack(ModBlocks.platemetal, 4, 0), new AnvilOutput[] {new AnvilOutput(new ItemStack(ModItems.plate_iron, 1))}).setTier(1));
constructionRecipes.add(new AnvilConstructionRecipe(
new ComparableStack(ModBlocks.heater_firebox),
@ -862,14 +864,6 @@ public class AnvilRecipes extends SerializableRecipe {
new OreDictStack(U.billet(), 3), new AnvilOutput[] {
new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.NU.ordinal())),
}).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(
new OreDictStack(PU239.billet(), 3), new AnvilOutput[] {
new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PU239.ordinal())),
}).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(
new OreDictStack(PURG.billet(), 3), new AnvilOutput[] {
new AnvilOutput(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RGP.ordinal())),
}).setTier(2));
//RBMK
constructionRecipes.add(new AnvilConstructionRecipe(

View File

@ -1,9 +1,10 @@
package com.hbm.items;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public interface IItemControlReceiver {
public void receiveControl(ItemStack stack, NBTTagCompound data);
public void receiveControl(EntityPlayer player, ItemStack stack, NBTTagCompound data);
}

View File

@ -335,7 +335,6 @@ public class ModItems {
public static Item plate_desh;
public static Item plate_bismuth;
public static Item photo_panel;
public static Item sat_base;
public static Item thruster_nuclear;
public static Item safety_fuse;
public static Item part_generic;
@ -631,12 +630,6 @@ public class ModItems {
public static Item thruster_medium;
public static Item thruster_large;
public static Item sat_head_mapper;
public static Item sat_head_scanner;
public static Item sat_head_radar;
public static Item sat_head_laser;
public static Item sat_head_resonator;
public static Item seg_10;
public static Item seg_15;
public static Item seg_20;
@ -1334,17 +1327,17 @@ public class ModItems {
public static Item missile_soyuz;
public static Item missile_soyuz_lander;
public static Item sat_mapper;
public static Item sat_scanner;
public static Item sat_radar;
public static Item sat_laser;
public static Item sat_foeq;
public static Item sat_resonator;
public static Item sat_miner;
public static Item sat_lunar_miner;
public static Item satellite;
@Deprecated public static Item sat_mapper;
@Deprecated public static Item sat_scanner;
@Deprecated public static Item sat_radar;
@Deprecated public static Item sat_laser;
@Deprecated public static Item sat_foeq;
@Deprecated public static Item sat_resonator;
@Deprecated public static Item sat_miner;
@Deprecated public static Item sat_lunar_miner;
public static Item sat_gerald;
public static Item sat_chip;
public static Item sat_interface;
public static Item sat_coord;
public static Item sat_designator;
public static Item sat_relay;
@ -2191,7 +2184,6 @@ public class ModItems {
ingot_solinium = new Item().setUnlocalizedName("ingot_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_solinium");
nugget_solinium = new Item().setUnlocalizedName("nugget_solinium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_solinium");
photo_panel = new Item().setUnlocalizedName("photo_panel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":photo_panel");
sat_base = new Item().setUnlocalizedName("sat_base").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_base");
thruster_nuclear = new Item().setUnlocalizedName("thruster_nuclear").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_nuclear");
safety_fuse = new Item().setUnlocalizedName("safety_fuse").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":safety_fuse");
part_generic = new ItemGenericPart().setUnlocalizedName("part_generic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":part_generic");
@ -2623,12 +2615,6 @@ public class ModItems {
thruster_medium = new Item().setUnlocalizedName("thruster_medium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_medium");
thruster_large = new Item().setUnlocalizedName("thruster_large").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":thruster_large");
sat_head_mapper = new Item().setUnlocalizedName("sat_head_mapper").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_mapper");
sat_head_scanner = new Item().setUnlocalizedName("sat_head_scanner").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_scanner");
sat_head_radar = new Item().setUnlocalizedName("sat_head_radar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_radar");
sat_head_laser = new Item().setUnlocalizedName("sat_head_laser").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_laser");
sat_head_resonator = new Item().setUnlocalizedName("sat_head_resonator").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":sat_head_resonator");
seg_10 = new Item().setUnlocalizedName("seg_10").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_10");
seg_15 = new Item().setUnlocalizedName("seg_15").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_15");
seg_20 = new Item().setUnlocalizedName("seg_20").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":seg_20");
@ -3428,17 +3414,17 @@ public class ModItems {
missile_soyuz = new ItemSoyuz().setUnlocalizedName("missile_soyuz").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz");
missile_soyuz_lander = new ItemCustomLore().setUnlocalizedName("missile_soyuz_lander").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":soyuz_lander");
missile_custom = new ItemCustomMissile().setUnlocalizedName("missile_custom").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":missile_custom");
sat_mapper = new ItemSatChip().setUnlocalizedName("sat_mapper").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_mapper");
sat_scanner = new ItemSatChip().setUnlocalizedName("sat_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_scanner");
sat_radar = new ItemSatChip().setUnlocalizedName("sat_radar").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_radar");
sat_laser = new ItemSatChip().setUnlocalizedName("sat_laser").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_laser");
sat_foeq = new ItemSatChip().setUnlocalizedName("sat_foeq").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_foeq");
sat_resonator = new ItemSatChip().setUnlocalizedName("sat_resonator").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_resonator");
sat_miner = new ItemSatChip().setUnlocalizedName("sat_miner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_miner");
sat_lunar_miner = new ItemSatChip().setUnlocalizedName("sat_lunar_miner").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_lunar_miner");
satellite = new ItemSatellite().setUnlocalizedName("satellite").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":satellite");
sat_mapper = new ItemSatChip().setUnlocalizedName("sat_mapper").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_mapper");
sat_scanner = new ItemSatChip().setUnlocalizedName("sat_scanner").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_scanner");
sat_radar = new ItemSatChip().setUnlocalizedName("sat_radar").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_radar");
sat_laser = new ItemSatChip().setUnlocalizedName("sat_laser").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_laser");
sat_foeq = new ItemSatChip().setUnlocalizedName("sat_foeq").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_foeq");
sat_resonator = new ItemSatChip().setUnlocalizedName("sat_resonator").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_resonator");
sat_miner = new ItemSatChip().setUnlocalizedName("sat_miner").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_miner");
sat_lunar_miner = new ItemSatChip().setUnlocalizedName("sat_lunar_miner").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":sat_lunar_miner");
sat_gerald = new ItemSatChip().setUnlocalizedName("sat_gerald").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_gerald");
sat_chip = new ItemSatChip().setUnlocalizedName("sat_chip").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_chip");
sat_interface = new ItemSatInterface().setUnlocalizedName("sat_interface").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_interface");
sat_coord = new ItemSatInterface().setUnlocalizedName("sat_coord").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_coord");
sat_designator = new ItemSatDesignator().setUnlocalizedName("sat_designator").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_designator");
sat_relay = new ItemSatChip().setUnlocalizedName("sat_relay").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_relay");
@ -4998,12 +4984,6 @@ public class ModItems {
GameRegistry.registerItem(thruster_medium, thruster_medium.getUnlocalizedName());
GameRegistry.registerItem(thruster_large, thruster_large.getUnlocalizedName());
GameRegistry.registerItem(thruster_nuclear, thruster_nuclear.getUnlocalizedName());
GameRegistry.registerItem(sat_base, sat_base.getUnlocalizedName());
GameRegistry.registerItem(sat_head_mapper, sat_head_mapper.getUnlocalizedName());
GameRegistry.registerItem(sat_head_scanner, sat_head_scanner.getUnlocalizedName());
GameRegistry.registerItem(sat_head_radar, sat_head_radar.getUnlocalizedName());
GameRegistry.registerItem(sat_head_laser, sat_head_laser.getUnlocalizedName());
GameRegistry.registerItem(sat_head_resonator, sat_head_resonator.getUnlocalizedName());
GameRegistry.registerItem(seg_10, seg_10.getUnlocalizedName());
GameRegistry.registerItem(seg_15, seg_15.getUnlocalizedName());
GameRegistry.registerItem(seg_20, seg_20.getUnlocalizedName());
@ -5708,6 +5688,7 @@ public class ModItems {
GameRegistry.registerItem(mp_chip_5, mp_chip_5.getUnlocalizedName());
//Satellites
GameRegistry.registerItem(satellite, satellite.getUnlocalizedName());
GameRegistry.registerItem(sat_mapper, sat_mapper.getUnlocalizedName());
GameRegistry.registerItem(sat_scanner, sat_scanner.getUnlocalizedName());
GameRegistry.registerItem(sat_radar, sat_radar.getUnlocalizedName());
@ -5718,7 +5699,6 @@ public class ModItems {
GameRegistry.registerItem(sat_lunar_miner, sat_lunar_miner.getUnlocalizedName());
GameRegistry.registerItem(sat_gerald, sat_gerald.getUnlocalizedName());
GameRegistry.registerItem(sat_chip, sat_chip.getUnlocalizedName());
GameRegistry.registerItem(sat_interface, sat_interface.getUnlocalizedName());
GameRegistry.registerItem(sat_coord, sat_coord.getUnlocalizedName());
GameRegistry.registerItem(sat_designator, sat_designator.getUnlocalizedName());
GameRegistry.registerItem(sat_relay, sat_relay.getUnlocalizedName());

View File

@ -8,7 +8,7 @@ import com.hbm.handler.threading.PacketThreading;
import com.hbm.items.ISatChip;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.SatelliteBase;
import com.hbm.saveddata.satellites.SatelliteScanner;
import net.minecraft.block.Block;
@ -53,7 +53,7 @@ public class ItemModLens extends ItemArmorMod implements ISatChip {
if(lens == null) return;
int freq = this.getFreq(lens);
Satellite sat = SatelliteSavedData.getData(world).getSatFromFreq(freq);
SatelliteBase sat = SatelliteSavedData.getData(world).getSatFromFreq(freq);
if(!(sat instanceof SatelliteScanner)) return;
int x = (int) Math.floor(player.posX);

View File

@ -64,7 +64,7 @@ public class ItemFluidIDMulti extends Item implements IItemFluidIdentifier, IIte
}
@Override
public void receiveControl(ItemStack stack, NBTTagCompound data) {
public void receiveControl(EntityPlayer player, ItemStack stack, NBTTagCompound data) {
if(data.hasKey("primary")) {
setType(stack, Fluids.fromID(data.getInteger("primary")), true);
}

View File

@ -0,0 +1,34 @@
package com.hbm.items.special;
import java.util.List;
import com.hbm.items.ISatChip;
import com.hbm.items.ItemEnumMulti;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class ItemSatellite extends ItemEnumMulti implements ISatChip {
public ItemSatellite() {
super(EnumSatType.class, true, true);
}
public static enum EnumSatType {
SPY,
SCANNER,
RADAR,
MINER_ASTRO,
MINER_LUNAR,
PRECISION_LASER,
DEATH_RAY,
XENIUM_RESONATOR,
RELAY
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
list.add(I18nUtil.resolveKey("satchip.frequency") + ": " + getFreq(stack));
}
}

View File

@ -72,7 +72,7 @@ public class ItemRTTYPager extends Item implements IItemControlReceiver, IGUIPro
}
@Override
public void receiveControl(ItemStack stack, NBTTagCompound data) {
public void receiveControl(EntityPlayer player, ItemStack stack, NBTTagCompound data) {
if(data.hasKey("chan")) {
if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound();
stack.stackTagCompound.setString(KEY_CHANNEL, data.getString(KEY_CHANNEL));

View File

@ -3,8 +3,7 @@ package com.hbm.items.tool;
import com.hbm.items.machine.ItemSatChip;
import com.hbm.lib.Library;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.Satellite.Interfaces;
import com.hbm.saveddata.satellites.SatelliteBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@ -19,7 +18,7 @@ public class ItemSatDesignator extends ItemSatChip {
if(!world.isRemote) {
Satellite sat = SatelliteSavedData.getData(world).getSatFromFreq(this.getFreq(stack));
SatelliteBase sat = SatelliteSavedData.getData(world).getSatFromFreq(this.getFreq(stack));
if(sat != null) {
MovingObjectPosition pos = Library.rayTrace(player, 300, 1);
@ -29,11 +28,7 @@ public class ItemSatDesignator extends ItemSatChip {
int y = pos.blockY + dir.offsetY;
int z = pos.blockZ + dir.offsetZ;
if(sat.satIface == Interfaces.SAT_COORD) {
sat.onCoordAction(world, player, x, y, z);
} else if(sat.satIface == Interfaces.SAT_PANEL) {
sat.onClick(world, x, z);
}
}
}

View File

@ -1,14 +1,12 @@
package com.hbm.items.tool;
import com.hbm.inventory.gui.GUIScreenSatCoord;
import com.hbm.inventory.gui.GUIScreenSatInterface;
import com.hbm.items.IItemControlReceiver;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemSatChip;
import com.hbm.main.MainRegistry;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.SatPanelPacket;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.SatelliteBase;
import com.hbm.tileentity.IGUIProvider;
import cpw.mods.fml.relauncher.Side;
@ -18,21 +16,16 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public class ItemSatInterface extends ItemSatChip implements IGUIProvider {
public class ItemSatInterface extends ItemSatChip implements IGUIProvider, IItemControlReceiver {
@SideOnly(Side.CLIENT)
public static Satellite currentSat;
public static final String KEY_NBT_CONNECTED = "connected";
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if(world.isRemote) {
player.openGui(MainRegistry.instance, 0, world, 0, 0, 0);
}
if(world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0);
return stack;
}
@ -44,27 +37,24 @@ public class ItemSatInterface extends ItemSatChip implements IGUIProvider {
if(((EntityPlayerMP) entity).getHeldItem() != stack)
return;
Satellite sat = SatelliteSavedData.getData(world).getSatFromFreq(this.getFreq(stack));
SatelliteBase sat = SatelliteSavedData.getData(world).getSatFromFreq(this.getFreq(stack));
if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound();
if(sat != null && entity.ticksExisted % 2 == 0) {
PacketDispatcher.wrapper.sendTo(new SatPanelPacket(sat), (EntityPlayerMP) entity); //making this one sat that is static might not have been a good idea
}
stack.stackTagCompound.setBoolean(KEY_NBT_CONNECTED, sat != null);
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return null;
}
@Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; }
@Override
@SideOnly(Side.CLIENT)
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
if(this == ModItems.sat_interface)
return new GUIScreenSatInterface(player);
else if(this == ModItems.sat_coord)
return new GUIScreenSatCoord(player);
if(this == ModItems.sat_coord) return new GUIScreenSatCoord(player);
return null;
}
@Override
public void receiveControl(EntityPlayer player, ItemStack stack, NBTTagCompound data) {
SatelliteBase sat = SatelliteSavedData.getData(player.worldObj).getSatFromFreq(this.getFreq(stack));
if(sat != null) sat.onCoordAction(player.worldObj, player, data.getInteger("x"), data.hasKey("y") ? data.getInteger("y") : -1, data.getInteger("z"));
}
}

View File

@ -534,7 +534,7 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro
}
@Override
public void receiveControl(ItemStack stack, NBTTagCompound data) {
public void receiveControl(EntityPlayer player, ItemStack stack, NBTTagCompound data) {
Configuration config = new Configuration();
config.readFromNBT(data);
config.restrictTo(availableAbilities);

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings {
public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod";
public static final String VERSION = "1.0.27 BETA (5758)";
public static final String VERSION = "1.0.27 BETA (5768)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -692,6 +692,7 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerEntityRenderingHandler(EntityRagingVortex.class, new RenderBlackHole());
RenderingRegistry.registerEntityRenderingHandler(EntityQuasar.class, new RenderQuasar());
RenderingRegistry.registerEntityRenderingHandler(EntityDeathBlast.class, new RenderDeathBlast());
RenderingRegistry.registerEntityRenderingHandler(EntityOrbitalLaser.class, new RenderOrbitalLaser());
RenderingRegistry.registerEntityRenderingHandler(EntitySpear.class, new RenderSpear());
RenderingRegistry.registerEntityRenderingHandler(EntityNukeTorex.class, new RenderTorex());
//minecarts

View File

@ -2,6 +2,7 @@ package com.hbm.main;
import com.hbm.blocks.BlockEnums.DecoCabinetEnum;
import com.hbm.blocks.BlockEnums.LightstoneType;
import com.hbm.blocks.BlockEnums.PlatemetalType;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockAbsorber.EnumAbsorberTier;
import com.hbm.blocks.generic.BlockConcreteColoredExt.EnumConcreteType;
@ -391,6 +392,13 @@ public class CraftingManager {
addShapelessAuto(new ItemStack(ModBlocks.concrete_smooth, 1), new Object[] { new ItemStack(ModBlocks.concrete_colored, 1, OreDictionary.WILDCARD_VALUE) });
addShapelessAuto(new ItemStack(ModBlocks.concrete_smooth, 1), new Object[] { new ItemStack(ModBlocks.concrete_colored_ext, 1, OreDictionary.WILDCARD_VALUE) });
String[] plateDyes = { "Black", "White", "Red", "Green", "LightGray", "Blue", "Purple", "Cyan", "Pink", "Lime", "Yellow", "LightBlue", "Magenta", "Orange" };
for(int i = 0; i < 14; i++) {
String dyeName = "dye" + plateDyes[i];
addRecipeAuto(new ItemStack(ModBlocks.platemetal, 8, i + 1), new Object[] { "PPP", "PDP", "PPP", 'P', new ItemStack(ModBlocks.platemetal, 1, PlatemetalType.BASE.ordinal()), 'D', dyeName });
}
addShapelessAuto(new ItemStack(ModBlocks.platemetal, 1, PlatemetalType.BASE.ordinal()), new Object[] { new ItemStack(ModBlocks.platemetal, 1, OreDictionary.WILDCARD_VALUE) });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.MACHINE.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_BROWN, '2', KEY_GRAY });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.MACHINE_STRIPE.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_BROWN, '2', KEY_BLACK });
addRecipeAuto(new ItemStack(ModBlocks.concrete_colored_ext, 6, EnumConcreteType.INDIGO.ordinal()), new Object[] { "CCC", "1 2", "CCC", 'C', ModBlocks.concrete_smooth, '1', KEY_BLUE, '2', KEY_PURPLE });
@ -593,12 +601,10 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModItems.ams_core_wormhole, 1), new Object[] { "DPD", "PSP", "DPD", 'D', ModItems.plate_dineutronium, 'P', ModItems.powder_spark_mix, 'S', ModItems.singularity });
addRecipeAuto(new ItemStack(ModItems.ams_core_eyeofharmony, 1), new Object[] { "ALA", "LSL", "ALA", 'A', ModItems.plate_dalekanium, 'L', new ItemStack(ModItems.fluid_barrel_full, 1, Fluids.LAVA.getID()), 'S', ModItems.black_hole });
addRecipeAuto(new ItemStack(ModItems.ams_core_thingy), new Object[] { "NSN", "NGN", "G G", 'N', GOLD.nugget(), 'G', GOLD.ingot(), 'S', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM.ordinal()) });
addRecipeAuto(new ItemStack(ModItems.photo_panel), new Object[] { " G ", "IPI", " C ", 'G', KEY_ANYPANE, 'I', ModItems.plate_polymer, 'P', NETHERQUARTZ.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB) });
addRecipeAuto(new ItemStack(ModBlocks.machine_satlinker), new Object[] { "PSP", "SCS", "PSP", 'P', STEEL.plate(), 'S', STAR.ingot(), 'C', ModItems.sat_chip });
addRecipeAuto(new ItemStack(ModItems.photo_panel), new Object[] { " G ", "IPI", " C ", 'G', KEY_ANYPANE, 'I', ModItems.plate_polymer, 'P', SI.billet(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB) });
addRecipeAuto(new ItemStack(ModBlocks.machine_satlinker), new Object[] { "PSP", "SCS", "PSP", 'P', ANY_RESISTANTALLOY.ingot(), 'S', ANY_PLASTIC.ingot(), 'C', ModItems.sat_chip });
addRecipeAuto(new ItemStack(ModBlocks.machine_keyforge), new Object[] { "PCP", "WSW", "WSW", 'P', STEEL.plate(), 'S', W.ingot(), 'C', ModItems.padlock, 'W', KEY_PLANKS });
addRecipeAuto(new ItemStack(ModItems.sat_chip), new Object[] { "WWW", "CIC", "WWW", 'W', MINGRADE.wireFine(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'I', ANY_PLASTIC.ingot() });
addShapelessAuto(new ItemStack(ModItems.geiger_counter), new Object[] { ModBlocks.geiger });
addRecipeAuto(new ItemStack(ModItems.sat_interface), new Object[] { "ISI", "PCP", "PAP", 'I', STEEL.ingot(), 'S', STAR.ingot(), 'P', ModItems.plate_polymer, 'C', ModItems.sat_chip, 'A', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) });
addRecipeAuto(new ItemStack(ModItems.sat_coord), new Object[] { "SII", "SCA", "SPP", 'I', STEEL.ingot(), 'S', STAR.ingot(), 'P', ModItems.plate_polymer, 'C', ModItems.sat_chip, 'A', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) });
addRecipeAuto(new ItemStack(ModBlocks.machine_transformer), new Object[] { "SCS", "MDM", "SCS", 'S', IRON.ingot(), 'D', MINGRADE.ingot(), 'M',ModItems.coil_copper, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR) });
addRecipeAuto(new ItemStack(ModBlocks.radiobox), new Object[] { "PLP", "PSP", "PLP", 'P', STEEL.plate(), 'S', ModItems.ring_starmetal, 'C', ModItems.fusion_core, 'L', DURA.plate() });

View File

@ -34,7 +34,7 @@ import com.hbm.lib.HbmWorld;
import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.potion.HbmPotion;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.XSatelliteRegistry;
import com.hbm.tileentity.TileMappings;
import com.hbm.tileentity.bomb.TileEntityLaunchPadBase;
import com.hbm.tileentity.bomb.TileEntityNukeCustom;
@ -271,7 +271,7 @@ public class MainRegistry {
GameRegistry.registerFuelHandler(new FuelHandler());
BulletConfigSyncingUtil.loadConfigsForSync();
CellularDungeonFactory.init();
Satellite.register();
XSatelliteRegistry.register();
HTTPHandler.loadStats();
CraftingManager.mainRegistry();
SiegeTier.registerTiers();
@ -1637,6 +1637,13 @@ public class MainRegistry {
ignoreMappings.add("hbm:item.drax");
ignoreMappings.add("hbm:item.drax_mk2");
ignoreMappings.add("hbm:item.drax_mk3");
ignoreMappings.add("hbm:item.sat_base");
ignoreMappings.add("hbm:item.sat_head_mapper");
ignoreMappings.add("hbm:item.sat_head_scanner");
ignoreMappings.add("hbm:item.sat_head_radar");
ignoreMappings.add("hbm:item.sat_head_laser");
ignoreMappings.add("hbm:item.sat_head_resonator");
ignoreMappings.add("hbm:item.sat_interface");
/// REMAP ///
remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses);

View File

@ -60,6 +60,8 @@ public class StructureManager {
public static final NBTStructure beached_patrol = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/beached_patrol.nbt"));
public static final NBTStructure lighthouse = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/lighthouse.nbt"));
public static final NBTStructure dish = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/dish.nbt"));
public static final NBTStructure water_pump = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/water_pump.nbt"));
public static final NBTStructure dead_dish_small = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/dead_dish_small.nbt"));
public static final NBTStructure desert_shack_1 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/desert_shack_1.nbt"));
public static final NBTStructure desert_shack_2 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/desert_shack_2.nbt"));
public static final NBTStructure desert_shack_3 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/desert_shack_3.nbt"));

View File

@ -19,14 +19,10 @@ public class PacketDispatcher {
wrapper.registerMessage(TESirenPacket.Handler.class, TESirenPacket.class, i++, Side.CLIENT);
//Signals server to change ItemStacks
wrapper.registerMessage(ItemDesignatorPacket.Handler.class, ItemDesignatorPacket.class, i++, Side.SERVER);
//Signals server to perform orbital strike, among other things
wrapper.registerMessage(SatLaserPacket.Handler.class, SatLaserPacket.class, i++, Side.SERVER);
//Universal package for sending small info packs back to server
wrapper.registerMessage(AuxButtonPacket.Handler.class, AuxButtonPacket.class, i++, Side.SERVER);
//Siren packet for looped sounds
wrapper.registerMessage(TEVaultPacket.Handler.class, TEVaultPacket.class, i++, Side.CLIENT);
//Packet to send sat info to players
wrapper.registerMessage(SatPanelPacket.Handler.class, SatPanelPacket.class, i++, Side.CLIENT);
//Packet to send block break particles
wrapper.registerMessage(ParticleBurstPacket.Handler.class, ParticleBurstPacket.class, i++, Side.CLIENT);
//Packet to send chunk radiation info to individual players
@ -39,8 +35,6 @@ public class PacketDispatcher {
wrapper.registerMessage(TEMissileMultipartPacket.Handler.class, TEMissileMultipartPacket.class, i++, Side.CLIENT);
//Aux Particle Packet, New Technology: like the APP but with NBT
wrapper.registerMessage(AuxParticlePacketNT.Handler.class, AuxParticlePacketNT.class, i++, Side.CLIENT);
//Signals server to do coord based satellite stuff
wrapper.registerMessage(SatCoordPacket.Handler.class, SatCoordPacket.class, i++, Side.SERVER);
//Triggers gun animations of the client
wrapper.registerMessage(HbmAnimationPacket.Handler.class, HbmAnimationPacket.class, i++, Side.CLIENT);
//Sends a funi text to display like a music disc announcement

View File

@ -1,88 +0,0 @@
package com.hbm.packet.toclient;
import java.io.IOException;
import com.hbm.items.tool.ItemSatInterface;
import com.hbm.saveddata.satellites.Satellite;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
public class SatPanelPacket implements IMessage {
PacketBuffer buffer;
int type;
public SatPanelPacket() {
}
public SatPanelPacket(Satellite sat) {
type = sat.getID();
this.buffer = new PacketBuffer(Unpooled.buffer());
NBTTagCompound nbt = new NBTTagCompound();
sat.writeToNBT(nbt);
try {
buffer.writeNBTTagCompoundToBuffer(nbt);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void fromBytes(ByteBuf buf) {
type = buf.readInt();
if (buffer == null) {
buffer = new PacketBuffer(Unpooled.buffer());
}
buffer.writeBytes(buf);
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(type);
if (buffer == null) {
buffer = new PacketBuffer(Unpooled.buffer());
}
buf.writeBytes(buffer);
}
public static class Handler implements IMessageHandler<SatPanelPacket, IMessage> {
@Override
@SideOnly(Side.CLIENT)
public IMessage onMessage(SatPanelPacket m, MessageContext ctx) {
Minecraft.getMinecraft();
try {
NBTTagCompound nbt = m.buffer.readNBTTagCompoundFromBuffer();
ItemSatInterface.currentSat = Satellite.create(m.type);
if(nbt != null)
ItemSatInterface.currentSat.readFromNBT(nbt);
} catch (Exception x) {
} finally {
m.buffer.release();
}
return null;
}
}
}

View File

@ -65,7 +65,7 @@ public class NBTItemControlPacket implements IMessage {
ItemStack held = p.getHeldItem();
if(held != null && held.getItem() instanceof IItemControlReceiver) {
((IItemControlReceiver) held.getItem()).receiveControl(held, nbt);
((IItemControlReceiver) held.getItem()).receiveControl(p, held, nbt);
}
}

View File

@ -1,72 +0,0 @@
package com.hbm.packet.toserver;
import com.hbm.items.ISatChip;
import com.hbm.items.tool.ItemSatInterface;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
public class SatCoordPacket implements IMessage {
int x;
int y;
int z;
int freq;
public SatCoordPacket()
{
}
public SatCoordPacket(int x, int y, int z, int freq)
{
this.x = x;
this.y = y;
this.z = z;
this.freq = freq;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
freq = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeInt(freq);
}
public static class Handler implements IMessageHandler<SatCoordPacket, IMessage> {
@Override
public IMessage onMessage(SatCoordPacket m, MessageContext ctx) {
EntityPlayer p = ctx.getServerHandler().playerEntity;
if(p.getHeldItem() != null && p.getHeldItem().getItem() instanceof ItemSatInterface) {
int freq = ISatChip.getFreqS(p.getHeldItem());
if(freq == m.freq) {
Satellite sat = SatelliteSavedData.getData(p.worldObj).getSatFromFreq(m.freq);
if(sat != null)
sat.onCoordAction(p.worldObj, p, m.x, m.y, m.z);
}
}
return null;
}
}
}

View File

@ -1,71 +0,0 @@
package com.hbm.packet.toserver;
import com.hbm.items.ISatChip;
import com.hbm.items.tool.ItemSatInterface;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer;
public class SatLaserPacket implements IMessage {
//0: Add
//1: Subtract
//2: Set
int x;
int z;
int freq;
public SatLaserPacket()
{
}
public SatLaserPacket(int x, int z, int freq)
{
this.x = x;
this.z = z;
this.freq = freq;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
z = buf.readInt();
freq = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(z);
buf.writeInt(freq);
}
public static class Handler implements IMessageHandler<SatLaserPacket, IMessage> {
@Override
public IMessage onMessage(SatLaserPacket m, MessageContext ctx) {
EntityPlayer p = ctx.getServerHandler().playerEntity;
if(p.getHeldItem() != null && p.getHeldItem().getItem() instanceof ItemSatInterface) {
int freq = ISatChip.getFreqS(p.getHeldItem());
if(freq == m.freq) {
Satellite sat = SatelliteSavedData.getData(p.worldObj).getSatFromFreq(m.freq);
if(sat != null)
sat.onClick(p.worldObj, m.x, m.z);
}
}
return null;
}
}
}

View File

@ -20,10 +20,10 @@ public class RenderDeathBlast extends Render {
private static final IModelCustom sphere = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/Sphere.obj"));
@Override
public void doRender(Entity entity, double x, double y, double z, float p_76986_8_, float p_76986_9_) {
public void doRender(Entity entity, double x, double y, double z, float f0, float interp) {
GL11.glPushMatrix();
GL11.glTranslatef((float)x, (float)y, (float)z);
GL11.glTranslated(x, y, z);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_TEXTURE_2D);
@ -31,12 +31,10 @@ public class RenderDeathBlast extends Render {
GL11.glDepthMask(false);
GL11.glPushMatrix();
//GL11.glRotatef((entity.ticksExisted % 360) * 10, 0, 1, 0);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
//GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glColor3f(1.0F, 0, 0);
GL11.glColor3f(0F, 1F, 0F);
Vec3 vector = Vec3.createVectorHelper(0.5D, 0, 0);
@ -74,10 +72,10 @@ public class RenderDeathBlast extends Render {
GL11.glPopMatrix();
renderOrb(entity, x, y, z, p_76986_8_, p_76986_9_);
renderOrb(entity, x, y, z, f0, interp);
}
public void renderOrb(Entity entity, double x, double y, double z, float p_76986_8_, float p_76986_9_) {
public void renderOrb(Entity entity, double x, double y, double z, float f0, float interp) {
GL11.glPushMatrix();
GL11.glTranslatef((float) x, (float) y, (float) z);
GL11.glDisable(GL11.GL_LIGHTING);
@ -85,13 +83,12 @@ public class RenderDeathBlast extends Render {
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glAlphaFunc(GL11.GL_GEQUAL, 0);
double scale = 10 - 10D * (((double)entity.ticksExisted) / ((double)EntityDeathBlast.maxAge));
double alpha = (((double)entity.ticksExisted) / ((double)EntityDeathBlast.maxAge));
double scale = 10 - 10D * (((double) entity.ticksExisted + interp) / ((double) EntityDeathBlast.maxAge));
double alpha = (((double) entity.ticksExisted + interp) / ((double) EntityDeathBlast.maxAge));
if(scale < 0)
scale = 0;
if(scale < 0) scale = 0;
GL11.glColor4d(1.0, 0, 1.0, alpha);
GL11.glColor4d(0.05, 1.0, 0.05, alpha);
GL11.glEnable(GL11.GL_BLEND);
GL11.glScaled(scale, scale, scale);
@ -100,7 +97,7 @@ public class RenderDeathBlast extends Render {
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glScaled(1.25, 1.25, 1.25);
GL11.glColor4d(1.0, 0, 0, alpha * 0.125);
GL11.glColor4d(0, 1, 0, alpha * 0.125);
for(int i = 0; i < 8; i++) {
sphere.renderAll();
@ -121,5 +118,4 @@ public class RenderDeathBlast extends Render {
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
return null;
}
}

View File

@ -0,0 +1,72 @@
package com.hbm.render.entity.effect;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
public class RenderOrbitalLaser extends Render {
@Override
public void doRender(Entity entity, double x, double y, double z, float f0, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x, y, z);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glDepthMask(false);
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glColor3f(1F, 0F, 0F);
Vec3 vector = Vec3.createVectorHelper(0.5D, 0, 0);
Tessellator tessellator = Tessellator.instance;
RenderHelper.disableStandardItemLighting();
for(int i = 0; i < 8; i++) {
tessellator.startDrawing(6);
tessellator.addVertex(vector.xCoord, 250.0D, vector.zCoord);
tessellator.addVertex(vector.xCoord, 0.0D, vector.zCoord);
vector.rotateAroundY(45);
tessellator.addVertex(vector.xCoord, 0.0D, vector.zCoord);
tessellator.addVertex(vector.xCoord, 250.0D, vector.zCoord);
tessellator.draw();
}
GL11.glColor3f(1F, 1F, 1F);
for(int i = 0; i < 8; i++) {
tessellator.startDrawing(6);
tessellator.addVertex(vector.xCoord / 2, 250.0D, vector.zCoord / 2);
tessellator.addVertex(vector.xCoord / 2, 0.0D, vector.zCoord / 2);
vector.rotateAroundY(45);
tessellator.addVertex(vector.xCoord / 2, 0.0D, vector.zCoord / 2);
tessellator.addVertex(vector.xCoord / 2, 250.0D, vector.zCoord / 2);
tessellator.draw();
}
GL11.glPopMatrix();
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
}
@Override
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
return null;
}
}

View File

@ -21,7 +21,7 @@ public class RenderSatLink extends TileEntitySpecialRenderer implements IItemRen
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glRotatef(180, 0F, 1F, 0F);
TileEntityMachineSatLink link = (TileEntityMachineSatLink) tile;

View File

@ -1,6 +1,7 @@
package com.hbm.saveddata;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.SatelliteBase;
import com.hbm.saveddata.satellites.XSatelliteRegistry;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraft.world.WorldSavedData;
@ -10,7 +11,7 @@ import java.util.Map.Entry;
public class SatelliteSavedData extends WorldSavedData {
public final HashMap<Integer, Satellite> sats = new HashMap<>();
public final HashMap<Integer, SatelliteBase> sats = new HashMap<>();
/**
* Constructor used for deserialization
@ -28,24 +29,18 @@ public class SatelliteSavedData extends WorldSavedData {
this.markDirty();
}
public boolean isFreqTaken(int freq) {
return getSatFromFreq(freq) != null;
}
public Satellite getSatFromFreq(int freq) {
return sats.get(freq);
}
public boolean isFreqTaken(int freq) { return getSatFromFreq(freq) != null; }
public SatelliteBase getSatFromFreq(int freq) { return sats.get(freq); }
@Override
public void readFromNBT(NBTTagCompound nbt) {
int satCount = nbt.getInteger("satCount");
for(int i = 0; i < satCount; i++) {
Satellite sat = Satellite.create(nbt.getInteger("sat_id_" + i));
SatelliteBase sat = XSatelliteRegistry.createFromId(nbt.getInteger("sat_id_" + i));
sat.readFromNBT((NBTTagCompound) nbt.getTag("sat_data_" + i));
int freq = nbt.getInteger("sat_freq_" + i);
sats.put(freq, sat);
}
}
@ -56,7 +51,7 @@ public class SatelliteSavedData extends WorldSavedData {
int i = 0;
for(Entry<Integer, Satellite> struct : sats.entrySet()) {
for(Entry<Integer, SatelliteBase> struct : sats.entrySet()) {
NBTTagCompound data = new NBTTagCompound();
struct.getValue().writeToNBT(data);
@ -74,7 +69,6 @@ public class SatelliteSavedData extends WorldSavedData {
data = (SatelliteSavedData) worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites");
}
return data;
}
}

View File

@ -1,129 +0,0 @@
package com.hbm.saveddata.satellites;
import com.hbm.items.ModItems;
import com.hbm.saveddata.SatelliteSavedData;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public abstract class Satellite {
public static final List<Class<? extends Satellite>> satellites = new ArrayList<>();
public static final HashMap<Item, Class<? extends Satellite>> itemToClass = new HashMap<>();
public enum InterfaceActions {
HAS_MAP, //lets the interface display loaded chunks
CAN_CLICK, //enables onClick events
SHOW_COORDS, //enables coordinates as a mouse tooltip
HAS_RADAR, //lets the interface display loaded entities
HAS_ORES //like HAS_MAP but only shows ores
}
public enum CoordActions {
HAS_Y //enables the Y-coord field which is disabled by default
}
public enum Interfaces {
NONE, //does not interact with any sat interface (i.e. asteroid miners)
SAT_PANEL, //allows to interact with the sat interface panel (for graphical applications)
SAT_COORD //allows to interact with the sat coord remote (for teleportation or other coord related actions)
}
public List<InterfaceActions> ifaceAcs = new ArrayList<>();
public List<CoordActions> coordAcs = new ArrayList<>();
public Interfaces satIface = Interfaces.NONE;
public static void register() {
registerSatellite(SatelliteMapper.class, ModItems.sat_mapper);
registerSatellite(SatelliteScanner.class, ModItems.sat_scanner);
registerSatellite(SatelliteRadar.class, ModItems.sat_radar);
registerSatellite(SatelliteLaser.class, ModItems.sat_laser);
registerSatellite(SatelliteResonator.class, ModItems.sat_resonator);
registerSatellite(SatelliteRelay.class, ModItems.sat_foeq);
registerSatellite(SatelliteMiner.class, ModItems.sat_miner);
registerSatellite(SatelliteLunarMiner.class, ModItems.sat_lunar_miner);
registerSatellite(SatelliteHorizons.class, ModItems.sat_gerald);
}
/**
* Register satellite.
* @param sat - Satellite class
* @param item - Satellite item (which will be placed in a rocket)
*/
public static void registerSatellite(Class<? extends Satellite> sat, Item item) {
if(!itemToClass.containsKey(item) && !itemToClass.containsValue(sat)) {
satellites.add(sat);
itemToClass.put(item, sat);
}
}
public static void orbit(World world, int id, int freq, double x, double y, double z) {
if(world.isRemote) {
return;
}
Satellite sat = create(id);
if(sat != null) {
SatelliteSavedData data = SatelliteSavedData.getData(world);
data.sats.put(freq, sat);
sat.onOrbit(world, x, y, z);
data.markDirty();
}
}
public static Satellite create(int id) {
Satellite sat = null;
try {
Class<? extends Satellite> c = satellites.get(id);
sat = c.newInstance();
} catch(Exception e) {
e.printStackTrace();
}
return sat;
}
public static int getIDFromItem(Item item) {
Class<? extends Satellite> sat = itemToClass.get(item);
return satellites.indexOf(sat);
}
public int getID() {
return satellites.indexOf(this.getClass());
}
public void writeToNBT(NBTTagCompound nbt) { }
public void readFromNBT(NBTTagCompound nbt) { }
/**
* Called when the satellite reaches space, used to trigger achievements and other funny stuff.
* @param x posX of the rocket
* @param y ditto
* @param z ditto
*/
public void onOrbit(World world, double x, double y, double z) { }
/**
* Called by the sat interface when clicking on the screen
* @param x the x-coordinate translated from the on-screen coords to actual world coordinates
* @param z ditto
*/
public void onClick(World world, int x, int z) { }
/**
* Called by the coord sat interface
* @param x the specified x-coordinate
* @param y ditto
* @param z ditto
*/
public void onCoordAction(World world, EntityPlayer player, int x, int y, int z) { }
}

View File

@ -0,0 +1,93 @@
package com.hbm.saveddata.satellites;
import com.hbm.tileentity.network.RTTYSystem;
import api.hbm.redstoneoverradio.IRORInteractive;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public abstract class SatelliteBase {
public static final String CHAN_SATLINK = "SAT_LINK";
public static final String CMD_SETTARGET = "settarget";
public static final String CMD_GETTARGET = "gettarget";
public static final String CMD_GETTARGETX = "gettargetx";
public static final String CMD_GETTARGETZ = "gettargetz";
public int range = 1_000;
public int targetX;
public int targetZ;
public String tx = "";
public int getID() {
return XSatelliteRegistry.satellites.indexOf(this.getClass());
}
public abstract String getType();
public void writeToNBT(NBTTagCompound nbt) {
nbt.setInteger("targetX", targetX);
nbt.setInteger("targetZ", targetZ);
nbt.setString("tx", tx);
}
public void readFromNBT(NBTTagCompound nbt) {
this.targetX = nbt.getInteger("targetX");
this.targetZ = nbt.getInteger("targetZ");
this.tx = nbt.getString("tx");
}
public void onOrbit(World world, double x, double y, double z) {
setTarget((int) Math.floor(x), (int) Math.floor(z));
RTTYSystem.broadcast(world, CHAN_SATLINK, "Established connection to " + getType() + " at " + targetX + " / " + targetZ);
}
public void onCommand(World world, String... cmd) {
onCommandTarget(world, cmd);
onCommandImpl(world, cmd);
}
public void onCommandTarget(World world, String... cmd) {
if(cmd.length <= 0) return;
if(cmd[0].equals(CMD_SETTARGET)) {
if(cmd.length == 3) {
targetX = IRORInteractive.parseInt(cmd[1]);
targetZ = IRORInteractive.parseInt(cmd[2]);
}
if(cmd.length == 4) {
targetX = IRORInteractive.parseInt(cmd[1]);
targetZ = IRORInteractive.parseInt(cmd[3]);
}
return;
}
if(cmd[0].equals(CMD_GETTARGET)) {
this.tx = targetX + ";" + targetZ;
return;
}
if(cmd[0].equals(CMD_GETTARGETX)) {
this.tx = "" + targetX;
return;
}
if(cmd[0].equals(CMD_GETTARGETZ)) {
this.tx = "" + targetZ;
return;
}
}
public void setTarget(int x, int z) {
this.targetX = x;
this.targetZ = z;
}
public void onCommandImpl(World world, String... cmd) { }
public void onCoordAction(World world, EntityPlayer player, int x, int y, int z) { }
}

View File

@ -0,0 +1,73 @@
package com.hbm.saveddata.satellites;
import java.util.Locale;
import com.hbm.entity.logic.EntityDeathBlast;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public class SatelliteDeathRay extends SatelliteBase {
public static final String CMD_FIRE = "fire";
public static final String CMD_CANFIRE = "canfire";
public static final int CHARGE_TIME = 5 * 60 * 20;
public long lastShot;
public SatelliteDeathRay() { }
@Override public String getType() { return "ORBITAL_FUN_PLATFORM_:)"; }
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setLong("lastShot", lastShot);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
lastShot = nbt.getLong("lastShot");
}
@Override
public void onCommandImpl(World world, String... cmd) {
if(cmd.length <= 0) return;
if(cmd[0].equals(CMD_FIRE)) {
deathBlast(world, targetX, targetZ);
return;
}
if(cmd[0].equals(CMD_CANFIRE)) {
this.tx = (lastShot + CHARGE_TIME < world.getTotalWorldTime()) + "";
this.tx = this.tx.toUpperCase(Locale.US);
return;
}
}
@Override
public void onCoordAction(World world, EntityPlayer player, int x, int y, int z) {
this.setTarget(x, z);
this.deathBlast(world, targetX, targetZ);
}
public void deathBlast(World world, int x, int z) {
if(lastShot + CHARGE_TIME < world.getTotalWorldTime()) {
lastShot = world.getTotalWorldTime();
int y = world.getHeightValue(x, z);
EntityDeathBlast blast = new EntityDeathBlast(world);
blast.posX = x;
blast.posY = y;
blast.posZ = z;
world.spawnEntityInWorld(blast);
}
}
}

View File

@ -1,5 +1,7 @@
package com.hbm.saveddata.satellites;
import java.util.Locale;
import com.hbm.entity.projectile.EntityTom;
import com.hbm.main.MainRegistry;
import com.hbm.saveddata.SatelliteSavedData;
@ -12,32 +14,59 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
public class SatelliteHorizons extends Satellite {
public class SatelliteHorizons extends SatelliteBase {
public static final String CMD_FIRE = "fire";
public static final String CMD_CANFIRE = "settarget";
boolean used = false;
public SatelliteHorizons() {
this.satIface = Interfaces.SAT_COORD;
}
public SatelliteHorizons() { }
@Override public String getType() { return "PAYLOAD_UNKNOWN"; }
@Override
public void onOrbit(World world, double x, double y, double z) {
super.onOrbit(world, x, y, z);
for(Object p : world.playerEntities)
((EntityPlayer)p).triggerAchievement(MainRegistry.horizonsStart);
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
nbt.setBoolean("used", used);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
used = nbt.getBoolean("used");
}
public void onCoordAction(World world, EntityPlayer player, int x, int y, int z) {
@Override
public void onCommandImpl(World world, String... cmd) {
if(cmd.length <= 0) return;
if(used)
if(cmd[0].equals(CMD_FIRE)) {
theHorizons(world, targetX, targetZ);
return;
}
if(cmd[0].equals(CMD_CANFIRE)) {
this.tx = (!used) + "";
this.tx = this.tx.toUpperCase(Locale.US);
return;
}
}
@Override
public void onCoordAction(World world, EntityPlayer player, int x, int y, int z) {
this.setTarget(x, z);
this.theHorizons(world, x, z);
}
public void theHorizons(World world, int x, int z) {
if(used) return;
used = true;
SatelliteSavedData.getData(world).markDirty();

View File

@ -1,42 +0,0 @@
package com.hbm.saveddata.satellites;
import com.hbm.entity.logic.EntityDeathBlast;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public class SatelliteLaser extends Satellite {
public long lastOp;
public SatelliteLaser() {
this.ifaceAcs.add(InterfaceActions.HAS_MAP);
this.ifaceAcs.add(InterfaceActions.SHOW_COORDS);
this.ifaceAcs.add(InterfaceActions.CAN_CLICK);
this.satIface = Interfaces.SAT_PANEL;
}
public void writeToNBT(NBTTagCompound nbt) {
nbt.setLong("lastOp", lastOp);
}
public void readFromNBT(NBTTagCompound nbt) {
lastOp = nbt.getLong("lastOp");
}
public void onClick(World world, int x, int z) {
if(lastOp + 10000 < System.currentTimeMillis()) {
lastOp = System.currentTimeMillis();
int y = world.getHeightValue(x, z);
EntityDeathBlast blast = new EntityDeathBlast(world);
blast.posX = x;
blast.posY = y;
blast.posZ = z;
world.spawnEntityInWorld(blast);
}
}
}

View File

@ -5,6 +5,6 @@ import com.hbm.itempool.ItemPoolsSatellite;
public class SatelliteLunarMiner extends SatelliteMiner {
static {
registerCargo(SatelliteLunarMiner.class, ItemPoolsSatellite.POOL_SAT_LUNAR);
SatelliteMiner.registerCargo(SatelliteLunarMiner.class, ItemPoolsSatellite.POOL_SAT_LUNAR);
}
}

View File

@ -1,9 +1,59 @@
package com.hbm.saveddata.satellites;
public class SatelliteMapper extends Satellite {
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public SatelliteMapper() {
this.ifaceAcs.add(InterfaceActions.HAS_MAP);
this.satIface = Interfaces.SAT_PANEL;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
public class SatelliteMapper extends SatelliteBase {
public static final String CMD_TARGET_LOADED = "targetloaded";
public static final String CMD_SPOT_PLAYER = "spotplayers";
public static final int SPOT_PLAYER_MAX_RANGE = 250;
public SatelliteMapper() { }
@Override public String getType() { return "NOT_A_SPY_SATELLITE_:)"; }
@Override
public void onCommandImpl(World world, String... cmd) {
if(cmd.length <= 0) return;
if(cmd[0].equals(CMD_TARGET_LOADED)) {
this.tx = "" + world.getChunkProvider().chunkExists(targetX >> 4, targetZ >> 4);
this.tx = this.tx.toUpperCase(Locale.US);
return;
}
if(cmd[0].equals(CMD_SPOT_PLAYER)) {
List<String> names = new ArrayList();
for(Object o : world.playerEntities) {
EntityPlayer player = (EntityPlayer) o;
int x = (int) Math.floor(player.posX);
int z = (int) Math.floor(player.posZ);
double dX = x - targetX;
double dZ = z - targetZ;
if(dX * dX + dZ * dZ <= SPOT_PLAYER_MAX_RANGE * SPOT_PLAYER_MAX_RANGE) {
int height = world.getHeightValue(x, z);
if(height < player.posY + 2) names.add(player.getCommandSenderName());
}
}
if(names.isEmpty()) {
this.tx = "NONE";
return;
}
this.tx = String.join(";", names);
return;
}
}
}

View File

@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound;
import java.util.HashMap;
public class SatelliteMiner extends Satellite {
public class SatelliteMiner extends SatelliteBase {
/**
* {@link WeightedRandomObject} array with loot the satellite will deliver.
*/
@ -15,9 +15,9 @@ public class SatelliteMiner extends Satellite {
public long lastOp;
public SatelliteMiner() {
this.satIface = Interfaces.NONE;
}
public SatelliteMiner() { }
@Override public String getType() { return "ASTEROID_MINER"; }
public void writeToNBT(NBTTagCompound nbt) {
nbt.setLong("lastOp", lastOp);
@ -49,7 +49,7 @@ public class SatelliteMiner extends Satellite {
* @return - Returns {@link com.hbm.itempool.ItemPool} key or null if the item is not a mining satellite.
*/
public static String getCargoForItem(Item satelliteItem) {
Class<? extends Satellite> satelliteClass = itemToClass.getOrDefault(satelliteItem, null);
Class<? extends SatelliteBase> satelliteClass = XSatelliteRegistry.itemToClass.getOrDefault(satelliteItem, null);
return satelliteClass != null ? CARGO.getOrDefault(satelliteClass, null) : null;
}

View File

@ -0,0 +1,108 @@
package com.hbm.saveddata.satellites;
import java.util.Locale;
import com.hbm.entity.logic.EntityOrbitalLaser;
import api.hbm.redstoneoverradio.IRORInteractive;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public class SatellitePrecisionLaser extends SatelliteBase {
public static final String CMD_FIRE = "fire";
public static final String CMD_CANFIRE = "canfire";
public static final String CMD_SETENTITYTARGET = "setentitytarget";
public static final int MAX_TARGET_RANGE = 1_000;
public static final int CHARGE_TIME = 5 * 20;
public long lastShot;
public int targetedEntity = -1;
public SatellitePrecisionLaser() { }
@Override public String getType() { return "ORBITAL_TATOO_REMOVER"; }
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setLong("lastShot", lastShot);
nbt.setInteger("targetedEntity", targetedEntity);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
lastShot = nbt.getLong("lastShot");
targetedEntity = nbt.getInteger("targetedEntity");
}
@Override
public void onCommandImpl(World world, String... cmd) {
if(cmd.length <= 0) return;
if(cmd[0].equals(CMD_FIRE)) {
if(this.targetedEntity != -1) {
Entity e = world.getEntityByID(this.targetedEntity);
this.targetedEntity = -1;
if(e == null || e.isDead) return;
int x = (int) Math.floor(e.posX);
int z = (int) Math.floor(e.posZ);
double dX = x - targetX;
double dZ = z - targetZ;
if(dX * dX + dZ * dZ <= MAX_TARGET_RANGE * MAX_TARGET_RANGE) {
this.deathBlast(world, e.posX, e.posY, e.posZ);
return;
}
}
deathBlast(world, targetX, targetZ);
return;
}
if(cmd[0].equals(CMD_CANFIRE)) {
this.tx = (lastShot + CHARGE_TIME < world.getTotalWorldTime()) + "";
this.tx = this.tx.toUpperCase(Locale.US);
return;
}
if(cmd[0].equals(CMD_SETENTITYTARGET)) {
this.targetedEntity = IRORInteractive.parseInt(cmd[1]);
return;
}
}
@Override
public void onCoordAction(World world, EntityPlayer player, int x, int y, int z) {
this.setTarget(x, z);
this.deathBlast(world, targetX, targetZ);
}
public void deathBlast(World world, int x, int z) {
int y = world.getHeightValue(x, z);
deathBlast(world, x + 0.5, y, z + 0.5);
}
public void deathBlast(World world, double x, double y, double z) {
if(lastShot + CHARGE_TIME < world.getTotalWorldTime()) {
lastShot = world.getTotalWorldTime();
EntityOrbitalLaser blast = new EntityOrbitalLaser(world);
blast.posX = x;
blast.posY = y;
blast.posZ = z;
blast.explode();
world.spawnEntityInWorld(blast);
}
}
}

View File

@ -1,10 +1,111 @@
package com.hbm.saveddata.satellites;
public class SatelliteRadar extends Satellite {
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public SatelliteRadar() {
this.ifaceAcs.add(InterfaceActions.HAS_MAP);
this.ifaceAcs.add(InterfaceActions.HAS_RADAR);
this.satIface = Interfaces.SAT_PANEL;
import com.hbm.tileentity.machine.TileEntityMachineRadarNT;
import api.hbm.entity.IRadarDetectableNT.RadarScanParams;
import api.hbm.redstoneoverradio.IRORInteractive;
import net.minecraft.entity.Entity;
import net.minecraft.world.World;
/**
* Basically the AUTOCAL is now mandatory lol lmao
*/
public class SatelliteRadar extends SatelliteBase {
public static final int MAX_SCAN_RANGE = 1_000;
public static RadarScanParams scanParams = new RadarScanParams(true, true, true, false);
public static final String CMD_SURVEY = "survey";
public static final String CMD_FILTER = "filter";
public static final String CMD_COUNT = "count";
public static final String CMD_GETTARGETID = "gettargetid";
public static final String CMD_GETPOSITION = "getposition";
public static final String CMD_GETNAME = "getname";
public List<Entity> cachedRadarResults = new ArrayList();
public List<Entity> filteredRadarResults = new ArrayList();
public SatelliteRadar() { }
@Override public String getType() { return "LEO_RADAR"; }
@Override
public void onCommandImpl(World world, String... cmd) {
if(cmd.length <= 0) return;
if(cmd[0].equals(CMD_SURVEY)) {
cachedRadarResults.clear();
for(Entity entity : TileEntityMachineRadarNT.matchingEntities) {
if(entity.dimension != world.provider.dimensionId) continue;
int x = (int) Math.floor(entity.posX);
int z = (int) Math.floor(entity.posZ);
double dX = x - targetX;
double dZ = z - targetZ;
if(dX * dX + dZ * dZ <= MAX_SCAN_RANGE * MAX_SCAN_RANGE) {
cachedRadarResults.add(entity);
}
}
filteredRadarResults = new ArrayList(cachedRadarResults);
return;
}
if(cmd[0].equals(CMD_FILTER) && cmd.length == 2) {
filteredRadarResults.clear();
String filter = cmd[1].toLowerCase(Locale.US);
for(Entity entity : cachedRadarResults) {
if(entity.isDead) continue;
String classname = entity.getClass().getSimpleName().toLowerCase(Locale.US);
if(classname.contains(filter)) {
filteredRadarResults.add(entity);
}
}
return;
}
if(cmd[0].equals(CMD_COUNT)) {
this.tx = "" + filteredRadarResults.size();
return;
}
if(cmd[0].equals(CMD_GETTARGETID) && cmd.length == 2) {
Entity target = getTargetFromIndex(cmd[1]);
if(target == null) { this.tx = ""; return; }
this.tx = "" + target.getEntityId();
return;
}
if(cmd[0].equals(CMD_GETPOSITION) && cmd.length == 2) {
Entity target = getTargetFromIndex(cmd[1]);
if(target == null) { this.tx = ""; return; }
this.tx = (int) Math.floor(target.posX) + ";" + (int) Math.floor(target.posY) + ";" + (int) Math.floor(target.posZ);
return;
}
if(cmd[0].equals(CMD_GETNAME) && cmd.length == 2) {
Entity target = getTargetFromIndex(cmd[1]);
if(target == null) { this.tx = ""; return; }
this.tx = target.getClass().getSimpleName().toLowerCase(Locale.US);
return;
}
}
public Entity getTargetFromIndex(String cmd) {
if(filteredRadarResults.size() <= 0) return null;
int index = IRORInteractive.parseInt(cmd, 0, filteredRadarResults.size()) - 1;
Entity target = filteredRadarResults.get(index);
if(target.isDead) return null;
return target;
}
}

View File

@ -5,11 +5,11 @@ import com.hbm.main.MainRegistry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
public class SatelliteRelay extends Satellite {
public class SatelliteRelay extends SatelliteBase {
public SatelliteRelay() {
this.satIface = Interfaces.NONE;
}
public SatelliteRelay() { }
@Override public String getType() { return "RX/TX"; }
public void onOrbit(World world, double x, double y, double z) {

View File

@ -4,20 +4,20 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.world.World;
public class SatelliteResonator extends Satellite {
public class SatelliteResonator extends SatelliteBase {
public SatelliteResonator() {
this.coordAcs.add(CoordActions.HAS_Y);
this.satIface = Interfaces.SAT_COORD;
}
public SatelliteResonator() { }
@Override public String getType() { return "XEN_RELAY"; }
public void onCoordAction(World world, EntityPlayer player, int x, int y, int z) {
if(!(player instanceof EntityPlayerMP))
return;
if(!(player instanceof EntityPlayerMP)) return;
world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F);
player.mountEntity(null);
world.getChunkFromChunkCoords(x >> 4, z >> 4);
if(y < 0) y = world.getHeightValue(x, z);
((EntityPlayerMP) player).playerNetServerHandler.setPlayerLocation(x + 0.5D, y, z + 0.5D, player.rotationYaw, player.rotationPitch);
world.playSoundEffect(player.posX, player.posY, player.posZ, "mob.endermen.portal", 1.0F, 1.0F);
}

View File

@ -1,9 +1,8 @@
package com.hbm.saveddata.satellites;
public class SatelliteScanner extends Satellite {
public class SatelliteScanner extends SatelliteBase {
public SatelliteScanner() {
this.ifaceAcs.add(InterfaceActions.HAS_ORES);
this.satIface = Interfaces.SAT_PANEL;
}
public SatelliteScanner() { }
@Override public String getType() { return "DEPTH_SCANNER"; }
}

View File

@ -0,0 +1,90 @@
package com.hbm.saveddata.satellites;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems;
import com.hbm.items.special.ItemSatellite.EnumSatType;
import com.hbm.saveddata.SatelliteSavedData;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class XSatelliteRegistry {
public static final List<Class<? extends SatelliteBase>> satellites = new ArrayList<>();
public static final HashMap<ComparableStack, Class<? extends SatelliteBase>> itemToClass = new HashMap<>();
public static void register() {
registerSatellite(SatelliteMapper.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.SPY));
registerSatellite(SatelliteScanner.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.SCANNER));
registerSatellite(SatelliteRadar.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.RADAR));
registerSatellite(SatelliteDeathRay.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.DEATH_RAY));
registerSatellite(SatelliteResonator.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.XENIUM_RESONATOR));
registerSatellite(SatelliteRelay.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.XENIUM_RESONATOR));
registerSatellite(SatelliteMiner.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.MINER_ASTRO));
registerSatellite(SatelliteLunarMiner.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.MINER_LUNAR));
registerSatellite(SatelliteHorizons.class, ModItems.sat_gerald);
registerSatellite(SatellitePrecisionLaser.class, new ComparableStack(ModItems.satellite, 1, EnumSatType.PRECISION_LASER));
registerSatellite(SatelliteMapper.class, ModItems.sat_mapper);
registerSatellite(SatelliteScanner.class, ModItems.sat_scanner);
registerSatellite(SatelliteRadar.class, ModItems.sat_radar);
registerSatellite(SatelliteDeathRay.class, ModItems.sat_laser);
registerSatellite(SatelliteResonator.class, ModItems.sat_resonator);
registerSatellite(SatelliteRelay.class, ModItems.sat_foeq);
registerSatellite(SatelliteMiner.class, ModItems.sat_miner);
registerSatellite(SatelliteLunarMiner.class, ModItems.sat_lunar_miner);
}
/**
* Register satellite.
* @param sat - Satellite class
* @param item - Satellite item (which will be placed in a rocket)
*/
@Deprecated
public static void registerSatellite(Class<? extends SatelliteBase> sat, Item item) {
if(!itemToClass.containsKey(item) && !itemToClass.containsValue(sat)) {
satellites.add(sat);
itemToClass.put(new ComparableStack(item), sat);
}
}
public static void registerSatellite(Class<? extends SatelliteBase> sat, ComparableStack item) {
if(!itemToClass.containsKey(item) && !itemToClass.containsValue(sat)) {
satellites.add(sat);
itemToClass.put(item, sat);
}
}
public static void orbit(World world, ItemStack stack, int freq, double x, double y, double z) {
if(world.isRemote) return;
SatelliteBase sat = createFromItem(stack);
if(sat != null) {
SatelliteSavedData data = SatelliteSavedData.getData(world);
data.sats.put(freq, sat);
sat.onOrbit(world, x, y, z);
data.markDirty();
}
}
public static SatelliteBase createFromId(int i) {
try {
return satellites.get(i).newInstance();
} catch(Exception e) { }
return null;
}
public static SatelliteBase createFromItem(ItemStack stack) {
try {
return itemToClass.get(new ComparableStack(stack).makeSingular()).newInstance();
} catch(Exception e) { }
return null;
}
}

View File

@ -19,10 +19,7 @@ import com.hbm.items.tool.ItemCoordinateBase;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.SatelliteHorizons;
import com.hbm.saveddata.satellites.SatelliteLaser;
import com.hbm.saveddata.satellites.SatelliteResonator;
import com.hbm.saveddata.satellites.SatelliteBase;
import com.hbm.tileentity.IConfigurableMachine;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.IRadarCommandReceiver;
@ -446,16 +443,8 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
if(link != null && link.getItem() == ModItems.sat_relay) {
World world = player.getEntityWorld();
Satellite sat = SatelliteSavedData.getData(world).getSatFromFreq(ISatChip.getFreqS(link));
if(sat instanceof SatelliteLaser) {
if(data.hasKey("launchPosX")) {
int x = data.getInteger("launchPosX");
int z = data.getInteger("launchPosZ");
worldObj.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F);
sat.onClick(world, x, z);
}
}
if(sat instanceof SatelliteHorizons) {
SatelliteBase sat = SatelliteSavedData.getData(world).getSatFromFreq(ISatChip.getFreqS(link));
if(data.hasKey("launchPosX")) {
int x = data.getInteger("launchPosX");
int z = data.getInteger("launchPosZ");
@ -464,16 +453,6 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
sat.onCoordAction(world, player, x, y, z);
}
}
if(sat instanceof SatelliteResonator) {
if(data.hasKey("launchPosX")) {
int x = data.getInteger("launchPosX");
int z = data.getInteger("launchPosZ");
int y = world.getTopSolidOrLiquidBlock(x, z); //the top fucking block because I will never make radars transmit Y coordinates as well!
worldObj.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F);
sat.onCoordAction(world, player, x, y, z);
}
}
}
if(link != null && link.getItem() == ModItems.radar_linker) {
BlockPos pos = ItemCoordinateBase.getPosition(link);

View File

@ -7,7 +7,7 @@ import com.hbm.inventory.gui.GUISatDock;
import com.hbm.itempool.ItemPool;
import com.hbm.items.ISatChip;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.SatelliteBase;
import com.hbm.saveddata.satellites.SatelliteMiner;
import com.hbm.tileentity.IGUIProvider;
import cpw.mods.fml.relauncher.Side;
@ -147,7 +147,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent
if(slots[15] != null) {
int freq = ISatChip.getFreqS(slots[15]);
Satellite sat = data.getSatFromFreq(freq);
SatelliteBase sat = data.getSatFromFreq(freq);
int delay = 10 * 60 * 1000;
@ -181,7 +181,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent
}
if(rocket.getDataWatcher().getWatchableObjectInt(16) == 1 && rocket.timer == 50) {
Satellite sat = data.getSatFromFreq(ISatChip.getFreqS(slots[15]));
SatelliteBase sat = data.getSatFromFreq(ISatChip.getFreqS(slots[15]));
if(sat != null) unloadCargo((SatelliteMiner) sat);
}
}

View File

@ -1,6 +1,7 @@
package com.hbm.tileentity.machine;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.SatelliteBase;
import com.hbm.tileentity.TileEntityTickingBase;
import api.hbm.redstoneoverradio.IRORInteractive;
@ -8,6 +9,7 @@ import api.hbm.redstoneoverradio.IRORValueProvider;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
public class TileEntityMachineSatLink extends TileEntityTickingBase implements IRORValueProvider, IRORInteractive {
@ -72,6 +74,18 @@ public class TileEntityMachineSatLink extends TileEntityTickingBase implements I
this.freq = buf.readInt();
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.freq = nbt.getInteger("freq");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("power", freq);
}
AxisAlignedBB bb = null;
@Override
@ -110,11 +124,45 @@ public class TileEntityMachineSatLink extends TileEntityTickingBase implements I
@Override
public String provideRORValue(String name) {
if(name.equals(PREFIX_VALUE + connected)) {
return this.connected ? "TRUE" : "FALSE";
}
if(name.equals(PREFIX_VALUE + "freq")) {
return "" + this.freq;
}
if(name.equals(PREFIX_VALUE + "rx")) {
SatelliteSavedData dat = SatelliteSavedData.getData(worldObj);
SatelliteBase sat = dat.getSatFromFreq(this.freq);
if(sat != null) {
return sat.tx;
}
return "";
}
return null;
}
@Override
public String runRORFunction(String name, String[] params) {
if(name.equals(PREFIX_FUNCTION + "setfreq") && params.length == 1) {
this.freq = IRORInteractive.parseInt(params[0], 0, 100_000);
this.markChanged();
}
if(name.equals(PREFIX_FUNCTION + "tx")) {
SatelliteSavedData dat = SatelliteSavedData.getData(worldObj);
SatelliteBase sat = dat.getSatFromFreq(this.freq);
String[] cmd = String.join(IRORInteractive.PARAM_SEPARATOR, params).split(" ");
if(sat != null) {
sat.onCommand(worldObj, cmd);
}
this.markChanged();
}
return null;
}
}

View File

@ -117,6 +117,12 @@ public class NTMWorldGenerator implements IWorldGenerator {
spawnWeight = StructureConfig.dishSpawnWeight;
}});
NBTStructure.registerStructure(0, new SpawnCondition("water_pump") {{
canSpawn = biome -> BiomeDictionary.isBiomeOfType(biome, Type.PLAINS) || BiomeDictionary.isBiomeOfType(biome, Type.SWAMP);
structure = new JigsawPiece("water_pump", StructureManager.water_pump, -10);
spawnWeight = StructureConfig.waterPumpSpawnWeight;
}});
NBTStructure.registerStructure(0, new SpawnCondition("forestchem") {{
canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome);
structure = new JigsawPiece("forest_chem", StructureManager.forest_chem, -9);
@ -191,6 +197,12 @@ public class NTMWorldGenerator implements IWorldGenerator {
spawnWeight = StructureConfig.desertShack3SpawnWeight;
}});
NBTStructure.registerStructure(0, new SpawnCondition("dead_dish_small") {{
canSpawn = biome -> BiomeDictionary.isBiomeOfType(biome, Type.SANDY);
structure = new JigsawPiece("dead_dish_small", StructureManager.dead_dish_small, -5);
spawnWeight = StructureConfig.deadDishSmallSpawnWeight;
}});
NBTStructure.registerStructure(0, new SpawnCondition("ruinA") {{
canSpawn = biome -> !isWaterBiome(biome) && biome.canSpawnLightningBolt();
structure = new JigsawPiece("NTMRuinsA", StructureManager.ntmruinsA, -1) {{conformToTerrain = true;}};

View File

@ -3284,25 +3284,19 @@ item.rune_isa.name=Cool Catalyst Matrix
item.rune_jera.name=Multiplicative Catalyst Matrix
item.rune_thurisaz.name=Additive Catalyst Matrix
item.safety_fuse.name=Zündschnur
item.sat_base.name=Satellitenkörper
item.sat_chip.name=Satelliten-ID-Chip
item.sat_coord.name=Satelliten-Zielmarkierer
item.sat_designator.name=Satelliten-Laserzielmarkierer
item.sat_foeq.name=PEAF - Mk.I FOEQ Dunasonde mit experimenter nuklearer Schubdüse
item.sat_gerald.name=Gerald der Konstruktionsandroid
item.sat_head_laser.name=Todesstrahl
item.sat_head_mapper.name=Hochleistungskamera
item.sat_head_radar.name=Radarschüssel
item.sat_head_resonator.name=Xenium-Resonator
item.sat_head_scanner.name=M700 Oberflächenabtaster
item.sat_interface.name=Satelliten-Kontrollinterface
item.sat_laser.name=Orbitaler Todesstrahl
item.sat_lunar_miner.name=Mond-Förderschiff
item.sat_mapper.name=Oberflächen-Abtastungssatellit
item.sat_miner.name=Asteroiden-Förderschiff
item.sat_radar.name=Radar-Überwachungssatellit
item.sat_resonator.name=Xenium-Resonator-Satellit
item.sat_scanner.name=Satellit mit Tiefenscanning-Modul
item.sat_laser.name=Orbitaler Todesstrahl (LEGACY)
item.sat_lunar_miner.name=Mond-Förderschiff (LEGACY)
item.sat_mapper.name=Oberflächen-Abtastungssatellit (LEGACY)
item.sat_miner.name=Asteroiden-Förderschiff (LEGACY)
item.sat_radar.name=Radar-Überwachungssatellit (LEGACY)
item.sat_resonator.name=Xenium-Resonator-Satellit (LEGACY)
item.sat_scanner.name=Satellit mit Tiefenscanning-Modul (LEGACY)
item.sawblade.name=Sägeblatt
item.schnitzel_vegan.name=Veganes Schnitzel
item.schrabidium_axe.name=Schrabidiumaxt
@ -3889,11 +3883,11 @@ tile.block_fiberglass.name=Fiberglasrolle
tile.block_fluorite.name=Fluoritblock
tile.block_foam.name=Schaum
tile.block_graphite.name=Graphitblock
tile.block_graphite_drilled.name=Gebohrtes Graphit
tile.block_graphite_fuel.name=Pile Brennstoff
tile.block_graphite_plutonium.name=Pile Brennstoff (Gebrütet)
tile.block_graphite_rod.name=Pile Steuerstab
tile.block_graphite_source.name=Pile Neutronenquelle
tile.block_graphite_drilled.name=Gebohrtes Graphit (LEGACY)
tile.block_graphite_fuel.name=Pile Brennstoff (LEGACY)
tile.block_graphite_plutonium.name=Pile Brennstoff (Gebrütet) (LEGACY)
tile.block_graphite_rod.name=Pile Steuerstab (LEGACY)
tile.block_graphite_source.name=Pile Neutronenquelle (LEGACY)
tile.block_insulator.name=Isolatorrolle
tile.block_lead.name=Bleiblock
tile.block_lanthanium.name=Lanthanblock
@ -4545,6 +4539,7 @@ tile.machine_rtg_orange.name=Starker RTG
tile.machine_rtg_purple.name=Paarvernichtungsgenerator
tile.machine_rtg_red.name=Fulminationsgenerator
tile.machine_rtg_yellow.name=Australium Supergenerator
tile.machine_satlink.name=Satelliten-Bodenstation
tile.machine_satlinker.name=Satelliten-ID-Manager
tile.machine_sawmill.name=Stirling-Sägemühle
tile.machine_sawmill.desc=Benötigt externe Hitzequelle.$Wärmestransferrate: T*0.1 TU/t$Minimalaufnahme: 100 TU/t, Maximalaufnahme: 300 TU/t

View File

@ -3839,20 +3839,20 @@ item.pile_rod.waste.name=Chicago Pile Nuclear Waste Rod
item.pile_rod.waste.desc=Highly reactive end product from leaving a Chicago Pile fuel rod in the reactor for too long.
item.pile_rod.zr.name=Chicago Pile Zirconium Rod
item.pile_rod.zr.desc=Inert zirconium rod which is transparent to neutrons. Ideal for pushing other rods safely out of the reactor.
item.pile_rod_boron.name=Chicago Pile Control Rod
item.pile_rod_boron.desc=§9[Neutron Absorber]$§eClick to toggle
item.pile_rod_detector.name=Chicago Pile Control & Detector Rod
item.pile_rod_detector.desc=§9[Neutron Detector/Absorber]$§eUse defuser to increase/decrease neutron limit$§eUse screwdriver w/o sneaking to inspect flux
item.pile_rod_lithium.name=Chicago Pile Lithium Cell
item.pile_rod_lithium.desc=§a[Breedable Fuel]$§eUse hand drill to inspect core
item.pile_rod_plutonium.name=Chicago Pile Plutonium Rod
item.pile_rod_plutonium.desc=§d[Neutron Source]
item.pile_rod_pu239.name=Chicago Pile Bred Uranium Rod
item.pile_rod_pu239.desc=§a[Reactive Fuel]$§eRich in Plutonium-239.
item.pile_rod_source.name=Chicago Pile Ra226Be Neutron Source
item.pile_rod_source.desc=§d[Neutron Source]
item.pile_rod_uranium.name=Chicago Pile Uranium Rod
item.pile_rod_uranium.desc=§a[Reactive Fuel]$§eUse hand drill to take core sample
item.pile_rod_boron.name=Chicago Pile Control Rod (LEGACY)
item.pile_rod_boron.desc=§9[Neutron Absorber]$§eClick to toggle (LEGACY)
item.pile_rod_detector.name=Chicago Pile Control & Detector Rod (LEGACY)
item.pile_rod_detector.desc=§9[Neutron Detector/Absorber]$§eUse defuser to increase/decrease neutron limit$§eUse screwdriver w/o sneaking to inspect flux (LEGACY)
item.pile_rod_lithium.name=Chicago Pile Lithium Cell (LEGACY)
item.pile_rod_lithium.desc=§a[Breedable Fuel]$§eUse hand drill to inspect core (LEGACY)
item.pile_rod_plutonium.name=Chicago Pile Plutonium Rod (LEGACY)
item.pile_rod_plutonium.desc=§d[Neutron Source] (LEGACY)
item.pile_rod_pu239.name=Chicago Pile Bred Uranium Rod (LEGACY)
item.pile_rod_pu239.desc=§a[Reactive Fuel]$§eRich in Plutonium-239. (LEGACY)
item.pile_rod_source.name=Chicago Pile Ra226Be Neutron Source (LEGACY)
item.pile_rod_source.desc=§d[Neutron Source] (LEGACY)
item.pile_rod_uranium.name=Chicago Pile Uranium Rod (LEGACY)
item.pile_rod_uranium.desc=§a[Reactive Fuel]$§eUse hand drill to take core sample (LEGACY)
item.pill_iodine.name=Iodine Pill
item.pill_iodine.desc=Removes negative effects
item.pill_herbal.name=Herbal Paste
@ -4395,26 +4395,29 @@ item.rune_isa.name=Cool Catalyst Matrix
item.rune_jera.name=Multiplicative Catalyst Matrix
item.rune_thurisaz.name=Additive Catalyst Matrix
item.safety_fuse.name=Safety Fuse
item.sat_base.name=Satellite Base
item.sat_chip.name=Satellite ID-Chip
item.sat_coord.name=Satellite Designator
item.sat_designator.name=Satellite Laser Designator
item.sat_relay.name=Satellite Radar Relay
item.sat_foeq.name=PEAF - Mk.I FOEQ Duna Probe with experimental Nuclear Propulsion
item.sat_relay.name=Satellite Radar Relay (LEGACY)
item.sat_foeq.name=PEAF - Mk.I FOEQ Duna Probe with experimental Nuclear Propulsion (LEGACY)
item.sat_gerald.name=Gerald The Construction Android
item.sat_head_laser.name=Death Ray
item.sat_head_mapper.name=High-Gain Optical Camera
item.sat_head_radar.name=Radar Dish
item.sat_head_resonator.name=Xenium Resonator
item.sat_head_scanner.name=M700 Survey Scanner
item.sat_interface.name=Satellite Control Interface
item.sat_laser.name=Orbital Death Ray
item.sat_lunar_miner.name=Lunar Mining Ship
item.sat_mapper.name=Surface Mapping Satellite
item.sat_miner.name=Asteroid Mining Ship
item.sat_radar.name=Radar Survey Satellite
item.sat_resonator.name=Xenium Resonator Satellite
item.sat_scanner.name=Satellite with Depth-Resource Scanning Module
item.sat_laser.name=Orbital Death Ray (LEGACY)
item.sat_lunar_miner.name=Lunar Mining Ship (LEGACY)
item.sat_mapper.name=Surface Mapping Satellite (LEGACY)
item.sat_miner.name=Asteroid Mining Ship (LEGACY)
item.sat_radar.name=Radar Survey Satellite (LEGACY)
item.sat_resonator.name=Xenium Resonator Satellite (LEGACY)
item.sat_scanner.name=Satellite with Depth-Resource Scanning Module (LEGACY)
item.satellite.death_ray.name=Orbital Death Ray
item.satellite.miner_astro.name=Asteroid Mining Ship
item.satellite.miner_lunar.name=Lunar Mining Ship
item.satellite.precision_laser.name=Orbital Precision Laser
item.satellite.radar.name=Radar Satellite
item.satellite.relay.name=Relay Satellite
item.satellite.scanner.name=Depth Scanning Satellite
item.satellite.spy.name=Spy Satellite
item.satellite.xenium_resonator.name=Xenium Resonator Satellite
item.sawblade.name=Sawblade
item.schnitzel_vegan.name=Vegan Schnitzel
item.schrabidium_axe.name=Schrabidium Axe
@ -5100,14 +5103,14 @@ tile.block_fluorite.name=Block of Fluorite
tile.block_foam.name=Foam
tile.block_insulator.name=Roll of Insulation
tile.block_graphite.name=Block of Graphite
tile.block_graphite_detector.name=Pile Neutron Detector
tile.block_graphite_drilled.name=Drilled Graphite
tile.block_graphite_fuel.name=Pile Fuel
tile.block_graphite_lithium.name=Pile Lithium Fuel
tile.block_graphite_plutonium.name=Pile Fuel (Bred)
tile.block_graphite_rod.name=Pile Control Rod
tile.block_graphite_source.name=Pile Neutron Source
tile.block_graphite_tritium.name=Pile Lithium Fuel (Bred)
tile.block_graphite_detector.name=Pile Neutron Detector (LEGACY)
tile.block_graphite_drilled.name=Drilled Graphite (LEGACY)
tile.block_graphite_fuel.name=Pile Fuel (LEGACY)
tile.block_graphite_lithium.name=Pile Lithium Fuel (LEGACY)
tile.block_graphite_plutonium.name=Pile Fuel (Bred) (LEGACY)
tile.block_graphite_rod.name=Pile Control Rod (LEGACY)
tile.block_graphite_source.name=Pile Neutron Source (LEGACY)
tile.block_graphite_tritium.name=Pile Lithium Fuel (Bred) (LEGACY)
tile.block_lead.name=Block of Lead
tile.block_lanthanium.name=Block of Lanthanium
tile.block_lithium.name=Block of Lithium
@ -5379,6 +5382,21 @@ tile.crystal_virus.name=Dark Crystal
tile.deco_aluminium.name=Aluminium Deco Block
tile.deco_asbestos.name=Asbestos Roof
tile.deco_beryllium.name=Beryllium Deco Block
tile.platemetal.base.name=Platemetal Block
tile.platemetal.black.name=Black Platemetal Block
tile.platemetal.white.name=White Platemetal Block
tile.platemetal.red.name=Red Platemetal Block
tile.platemetal.green.name=Green Platemetal Block
tile.platemetal.light_gray.name=Light Gray Platemetal Block
tile.platemetal.blue.name=Blue Platemetal Block
tile.platemetal.purple.name=Purple Platemetal Block
tile.platemetal.cyan.name=Cyan Platemetal Block
tile.platemetal.pink.name=Pink Platemetal Block
tile.platemetal.lime.name=Lime Platemetal Block
tile.platemetal.yellow.name=Yellow Platemetal Block
tile.platemetal.light_blue.name=Light Blue Platemetal Block
tile.platemetal.magenta.name=Magenta Platemetal Block
tile.platemetal.orange.name=Orange Platemetal Block
tile.deco_computer.ibm_300pl.name=IBM Personal Computer 300PL
tile.deco_crt.name=Old CRT Screen
tile.deco_emitter.name=Deco Light Emitter
@ -5816,6 +5834,7 @@ tile.machine_rtg_orange.name=Strong RT Generator
tile.machine_rtg_purple.name=Antimatter Annihilation Generator
tile.machine_rtg_red.name=Fulmination Generator
tile.machine_rtg_yellow.name=Australium Superfuel Reactor
tile.machine_satlink.name=Satellite Ground Station
tile.machine_satlinker.name=Satellite ID Manager
tile.machine_sawmill.name=Stirling Sawmill
tile.machine_sawmill.desc=Requires external heat source.$Heat transfer rate: T*0.1 TU/t$Min intake: 100 TU/t, Max intake: 300 TU/t
@ -6292,8 +6311,18 @@ tile.spotlight_fluoro.name=Fluorescent Light
tile.spotlight_halogen.name=Halogen Floodlight
tile.stalactite.asbestos.name=Asbestos Stalactite
tile.stalactite.sulfur.name=Sulfurous Stalactite
tile.stalactite.ice.name=Icy Stalactite
tile.stalactite.snow.name=Snowy Stalactite
tile.stalactite.glyphid1.name=Glyphid Stalactite
tile.stalactite.glyphid2.name=Bloated Glyphid Stalactite
tile.stalactite.glyphid3.name=Putrid Glyphid Stalactite
tile.stalagmite.asbestos.name=Asbestos Stalagmite
tile.stalagmite.sulfur.name=Sulfurous Stalagmite
tile.stalagmite.ice.name=Icy Stalagmite
tile.stalagmite.snow.name=Snowy Stalagmite
tile.stalagmite.glyphid1.name=Glyphid Stalagmite
tile.stalagmite.glyphid2.name=Bloated Glyphid Stalagmite
tile.stalagmite.glyphid3.name=Putrid Glyphid Stalagmite
tile.steel_beam.name=Steel Beam
tile.steel_corner.name=Steel Wall Corner
tile.steel_grate.name=Steel Grate

View File

@ -0,0 +1,11 @@
{
"name": "Petroleum Gas",
"icon": ["hbm:item.fluid_icon", 1, 24],
"trigger": [["hbm:item.fluid_icon", 1, 24]],
"title": {
"en_US": "Petroleum Gas"
},
"content": {
"en_US": "Obtained after [[refining|Oil Refinery]] [[heated|Boiler]] crude oil. Petroleum gas is the main ingredient in [[polymer|Polymer]], [[bakelite|Bakelite]], and [[perfluoromethyl|Perfluoromethyl]] making it a key ingredient for progression in all stages of the game. It is also the primary fluid used in [[fracking solution|Fracking Solution]].<br><br>See also:<br>[[Basic Oil Processing]]<br>[[Advanced Oil Processing]]<br>[[Vacuum Oil Processing]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Asteroid Mining Ship",
"icon": ["hbm:item.satellite", 1, 3],
"trigger": [["hbm:item.satellite", 1, 3]],
"title": {
"en_US": "Asteroid Mining Ship"
},
"content": {
"en_US": "The asteroid mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined in space. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Lunar Mining Ship",
"icon": ["hbm:item.satellite", 1, 4],
"trigger": [["hbm:item.satellite", 1, 4]],
"title": {
"en_US": "Lunar Mining Ship"
},
"content": {
"en_US": "The lunar mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined on the moon. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.<br><br>Unlike the [[asteroid mining ship|Asteroid Mining Ship]], the selection of items it can harvest is much smaller, however, the large quantities of moon turf it can produce are important for [[helium-3|Helium-3]], a powerful fuel for the [[fusion reactor|Fusion Reactor]].<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Orbital Death Ray",
"icon": ["hbm:item.satellite", 1, 6],
"trigger": [["hbm:item.satellite", 1, 6]],
"title": {
"en_US": "Orbital Death Ray"
},
"content": {
"en_US": "The orbital death ray is a powerful nuclear-powered orbital weapon firing a laser that deals as much damage as a high-yield mini nuke, but without the radiation. Despite the powerful energy source, the ray takes five minutes to fully charge. Unlike the [[precision laser|Orbital Precision Laser]], it lacks the entity targeting option that would let it shoot down missiles or hit fast-moving targets.<br><br>* '§efire§r' will fire the laser at the current target position, assuming the ray has finished charging.<br>* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the death ray is ready to fire.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Orbital Precision Laser",
"icon": ["hbm:item.satellite", 1, 5],
"trigger": [["hbm:item.satellite", 1, 5]],
"title": {
"en_US": "Orbital Precision Laser"
},
"content": {
"en_US": "The orbital precision laser is a low-power weapon that harvests sunlight to charge up a small laser beam. The beam only takes five seconds to charge up, and deals marginally more block damage than TNT. The direct hit damage for struck entities is however much higher. When combined with the targeting data of a [[radar satellite|Radar Satellite]], it can potentially also shoot down missiles.<br><br>* '§efire§r' will fire the laser at the current target position, assuming the laser has finished charging. If the satellite has been supplied with entity target data, it will use the position of that entitiy instead, assuming it its within 1,000 blocks of the target position. After one shot, the entity targeting data is used up and the satellite's target position will be used again.<br>* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the laser is ready to fire.<br>* '§esetentitytarget §eid§r' supplies an entity ID for precise targeting, which is used up after one shot. The ID can be obtained from a radar satellite.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Radar Satellite",
"icon": ["hbm:item.satellite", 1, 2],
"trigger": [["hbm:item.satellite", 1, 2]],
"title": {
"en_US": "Radar Satellite"
},
"content": {
"en_US": "The radar satellite can detect all radar-detectable entities like players and missiles in a 1,000 block radius around its target position. It can compile, filter, and provide a list of detected objects, along with their type and exact position.<br><br>* '§esurvey§r' scans the area and saves the results to a base list and a filtered list. These two lists are now the same, and stored within the satellite.<br>* '§efilter §ename§r' will overwrite the filtered list with a new list, containing only entries from the original list that match that name filter. Since the original list is retained, the filter operation can be run multiple times for multiple types without needing a survey operation.<br>* '§ecount§r' writes the amount of entries on the filterd list to RX.<br>* '§egettargetid §eindex§r' retrieves the unique entity ID from that entry on the list. This ID can be used for precise entity targeting by other satellites.<br>* '§egetposition §eindex§r' retrieves the exact x/y/z position of the specified entry. The coordinates are separated by semicolons.<br>* '§egetname §eindex§r' retrieves the class name of that entry, this name is what's used for filtering.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Satellite",
"icon": ["hbm:item.satellite"],
"trigger": [],
"title": {
"en_US": "Satellite"
},
"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.<br><br>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]].<br><br>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.<br><br>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.<br><br>The common target commands are as follows:<br>* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')<br>* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX<br>* '§egettargetx§r'<br>* '§egettargetz§r'<br><br>See also:<br>* [[Spy Satellite]]<br>* [[Depth Scanning Satellite]]<br>* [[Radar Satellite]]<br>* [[Asteroid Mining Ship]]<br>* [[Lunar Mining Ship]]<br>* [[Orbital Precision Laser]]<br>* [[Orbital Death Ray]]<br>* [[Xenium Resonator Satellite]]<br>* [[Relay Satellite]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Satellite Ground Station",
"icon": ["hbm:tile.machine_satlink"],
"trigger": [["hbm:tile.machine_satlink"]],
"title": {
"en_US": "Satellite Ground Station"
},
"content": {
"en_US": "The satellite ground station is an advanced [[Redstone over Radio]] component that allows indirect connection of traditional RoR components and [[satellites|Satellite]]. It doesn't send or receive RoR signals directly, instead, it needs an external [[receiver|Redstone-over-Radio Controller]] or [[transmitter|Redstone-over-Radio Reader]] to interface with RoR.<br><br>The ground station can only connect to one satellite at a time. The frequency can be set either by using a configured satellite ID chip on the ground station, or via RoR command.<br><br>The two most important RoR functions the ground station has are RX and TX.<br><br>RX is a readable value that is relayed from the satellite. The contents of that value depend on the satellite, and is usually set in response to a command. For example, on the [[orbital precision laser|Orbital Precision Laser]], the function 'canfire' will set the RX value to either 'TRUE' or 'FALSE' depending on whether the laser is ready to fire.<br><br>TX is a function that allows commands to be relayed from the ground station to the satellite to control it or to request data. For example, the RoR command 'tx!settarget 200 300' will relay the command 'settarget 200 300' to the connected satellite. Do note that satellite commands do not use parameter separators like RoR commands do, since the satellite command is technically just one big RoR parameter.<br><br>In conjunction with the [[AUTOCAL]], the ground station becomes incredibly powerful, as it allows for automated targeting of satellites, data processing and more. For example, a [[radar satellite|Radar Satellite]] could survey the airspace for airborne missiles, relay that data to the AUTOCAL which then sends a signal to a precision laser which intercepts the missile."
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Depth Scanning Satellite",
"icon": ["hbm:item.satellite", 1, 1],
"trigger": [["hbm:item.satellite", 1, 1]],
"title": {
"en_US": "Depth Scanning Satellite"
},
"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.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Spy Satellite",
"icon": ["hbm:item.satellite", 1, 0],
"trigger": [["hbm:item.satellite", 1, 0]],
"title": {
"en_US": "Spy Satellite"
},
"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.<br><br>* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.<br>* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Xenium Resonator Satellite",
"icon": ["hbm:item.satellite", 1, 7],
"trigger": [["hbm:item.satellite", 1, 7]],
"title": {
"en_US": "Xenium Resonator Satellite"
},
"content": {
"en_US": "The xenium resonator allows teleportation within the same dimension. It can be controlled either with a satellite designator or the satellite laser designator. When using the satellite designator, the Y value can be omitted, which will default it to surface level.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
}

View File

@ -152,6 +152,14 @@ v -0.750000 1.750000 -0.750000
v -0.750000 1.750000 0.750000
v 0.750000 1.750000 0.750000
v 0.750000 1.750000 -0.750000
v -0.875000 0.125000 0.875000
v 0.875000 0.125000 0.875000
v -0.875000 0.125000 -0.875000
v 0.875000 0.125000 -0.875000
v -0.875000 1.875000 -0.875000
v -0.875000 1.875000 0.875000
v 0.875000 1.875000 0.875000
v 0.875000 1.875000 -0.875000
vt 0.269231 0.000000
vt 0.000000 0.333333
vt 0.000000 0.000000
@ -180,10 +188,26 @@ vt 1.000000 0.285714
vt 0.769231 0.571429
vt 1.000000 0.285714
vt 0.769231 0.571429
vt 0.000000 0.333333
vt 0.269231 0.000000
vt 0.000000 0.000000
vt 0.269231 1.000000
vt 0.000000 0.666667
vt 0.000000 1.000000
vt -0.000000 0.666667
vt 0.269231 0.333333
vt -0.000000 0.333333
vt 0.269231 0.666667
vt 0.538462 0.333333
vt 0.269231 0.333333
vt 0.269231 0.666667
vt 0.538462 0.333333
vt 0.538462 0.666667
vt 0.538462 0.666667
vt 1.000000 0.571429
vt 1.000000 0.571429
vt 0.538462 0.666667
vt 0.538462 0.666667
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn -1.0000 0.0000 0.0000
@ -203,18 +227,30 @@ f 44/77/11 47/74/11 42/72/11
f 41/78/8 45/79/8 43/80/8
f 43/81/9 48/82/9 44/77/9
f 42/83/10 46/84/10 41/78/10
f 50/85/7 51/86/7 49/87/7
f 53/88/6 55/89/6 54/90/6
f 53/91/11 49/92/11 51/93/11
f 56/94/10 51/95/10 52/96/10
f 54/97/9 50/98/9 49/92/9
f 55/89/8 52/96/8 50/85/8
f 35/57/6 36/68/6 34/58/6
f 39/60/7 40/67/7 37/61/7
f 33/63/8 38/70/8 37/64/8
f 35/66/9 37/85/9 40/67/9
f 34/69/10 39/86/10 38/70/10
f 35/66/9 37/99/9 40/67/9
f 34/69/10 39/100/10 38/70/10
f 36/68/11 40/67/11 39/60/11
f 43/71/6 44/77/6 42/72/6
f 47/74/7 48/82/7 45/75/7
f 44/77/11 48/82/11 47/74/11
f 41/78/8 46/84/8 45/79/8
f 43/81/9 45/87/9 48/82/9
f 42/83/10 47/88/10 46/84/10
f 43/81/9 45/101/9 48/82/9
f 42/83/10 47/102/10 46/84/10
f 50/85/7 52/96/7 51/86/7
f 53/88/6 56/94/6 55/89/6
f 53/91/11 54/97/11 49/92/11
f 56/94/10 53/103/10 51/95/10
f 54/97/9 55/104/9 50/98/9
f 55/89/8 56/94/8 52/96/8
o Battery
v 0.687500 1.875000 -0.875000
v 0.875000 1.875000 -0.687500
@ -483,158 +519,158 @@ vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn -1.0000 0.0000 0.0000
s off
f 56/89/12 62/90/12 70/91/12
f 83/92/13 74/93/13 51/94/13
f 68/95/14 51/96/14 74/97/14
f 68/98/15 64/99/15 58/100/15
f 72/101/15 63/102/15 74/103/15
f 58/104/16 60/105/16 65/106/16
f 58/104/13 56/89/13 55/107/13
f 60/108/14 66/109/14 65/110/14
f 70/111/17 68/112/17 67/113/17
f 62/114/18 64/99/18 63/115/18
f 64/99/19 56/89/19 57/116/19
f 75/117/18 73/118/18 78/119/18
f 77/120/20 71/121/20 76/122/20
f 63/123/13 54/124/13 62/125/13
f 75/117/15 84/126/15 92/127/15
f 62/128/12 50/129/12 77/130/12
f 90/131/21 86/132/21 81/133/21
f 78/134/17 76/122/17 75/135/17
f 49/136/18 72/101/18 71/121/18
f 72/101/19 54/124/19 53/137/19
f 88/138/14 52/139/14 92/140/14
f 59/141/13 80/142/13 66/143/13
f 80/142/16 82/144/16 85/145/16
f 83/146/12 78/119/12 95/147/12
f 82/148/14 86/132/14 85/149/14
f 90/131/17 88/150/17 87/151/17
f 67/152/18 83/153/18 70/154/18
f 85/155/15 87/156/15 84/157/15
f 96/158/21 92/140/21 52/139/21
f 95/159/20 91/160/20 94/161/20
f 89/162/12 81/163/12 79/164/12
f 96/158/17 94/161/17 93/165/17
f 108/166/20 104/167/20 105/168/20
f 100/169/12 104/167/12 102/170/12
f 108/171/15 106/172/15 110/173/15
f 112/174/21 102/170/21 107/175/21
f 106/172/19 100/169/19 109/176/19
f 106/172/18 104/177/18 103/178/18
f 102/179/17 108/166/17 107/180/17
f 112/174/14 98/181/14 97/182/14
f 100/183/13 110/184/13 109/185/13
f 110/184/16 98/186/16 111/187/16
f 124/188/20 120/189/20 121/190/20
f 116/191/12 120/189/12 118/192/12
f 124/193/15 122/194/15 126/195/15
f 128/196/21 118/192/21 123/197/21
f 122/194/19 116/191/19 125/198/19
f 122/194/18 120/199/18 119/200/18
f 118/201/17 124/188/17 123/202/17
f 128/196/14 114/203/14 113/204/14
f 116/205/13 126/206/13 125/207/13
f 126/206/16 114/208/16 127/209/16
f 70/91/12 59/210/12 60/211/12
f 60/211/12 55/212/12 56/89/12
f 56/89/12 61/213/12 62/90/12
f 62/90/12 69/214/12 70/91/12
f 70/91/12 60/211/12 56/89/12
f 83/92/13 84/215/13 74/93/13
f 68/95/14 69/216/14 51/96/14
f 58/100/15 65/217/15 66/218/15
f 66/218/15 67/219/15 68/98/15
f 68/98/15 63/220/15 64/99/15
f 64/99/15 57/116/15 58/100/15
f 58/100/15 66/218/15 68/98/15
f 74/103/15 75/221/15 76/222/15
f 76/222/15 71/223/15 72/101/15
f 72/101/15 53/137/15 63/102/15
f 63/102/15 68/224/15 74/103/15
f 74/103/15 76/222/15 72/101/15
f 58/104/16 55/107/16 60/105/16
f 58/104/13 57/116/13 56/89/13
f 60/108/14 59/225/14 66/109/14
f 70/111/17 69/226/17 68/112/17
f 62/114/18 61/213/18 64/99/18
f 64/99/19 61/213/19 56/89/19
f 75/117/18 91/160/18 73/118/18
f 77/120/20 49/136/20 71/121/20
f 63/123/13 53/137/13 54/124/13
f 92/127/15 93/227/15 94/228/15
f 94/228/15 91/229/15 75/117/15
f 75/117/15 74/93/15 84/126/15
f 84/126/15 88/230/15 92/127/15
f 92/127/15 94/228/15 75/117/15
f 77/130/12 78/231/12 51/232/12
f 51/232/12 69/233/12 62/128/12
f 62/128/12 54/124/12 50/129/12
f 50/129/12 49/234/12 77/130/12
f 77/130/12 51/232/12 62/128/12
f 90/131/21 87/151/21 86/132/21
f 78/134/17 77/120/17 76/122/17
f 49/136/18 50/129/18 72/101/18
f 72/101/19 50/129/19 54/124/19
f 88/138/14 89/235/14 52/139/14
f 59/141/13 79/236/13 80/142/13
f 80/142/16 79/236/16 82/144/16
f 95/147/12 96/237/12 52/238/12
f 52/238/12 89/239/12 83/146/12
f 83/146/12 51/94/12 78/119/12
f 78/119/12 73/240/12 95/147/12
f 95/147/12 52/238/12 83/146/12
f 82/148/14 81/133/14 86/132/14
f 90/131/17 89/241/17 88/150/17
f 67/152/18 84/242/18 83/153/18
f 84/157/15 67/152/15 66/143/15
f 66/143/15 80/243/15 85/155/15
f 85/155/15 86/244/15 87/156/15
f 87/156/15 88/245/15 84/157/15
f 84/157/15 66/143/15 85/155/15
f 96/158/21 93/165/21 92/140/21
f 95/159/20 73/118/20 91/160/20
f 79/164/12 59/141/12 70/154/12
f 70/154/12 83/246/12 89/162/12
f 89/162/12 90/247/12 81/163/12
f 81/163/12 82/248/12 79/164/12
f 79/164/12 70/154/12 89/162/12
f 96/158/17 95/159/17 94/161/17
f 108/166/20 101/249/20 104/167/20
f 102/170/12 97/182/12 98/186/12
f 98/186/12 99/250/12 100/169/12
f 100/169/12 103/178/12 104/167/12
f 104/167/12 101/249/12 102/170/12
f 102/170/12 98/186/12 100/169/12
f 110/173/15 111/251/15 112/252/15
f 112/252/15 107/253/15 108/171/15
f 108/171/15 105/254/15 106/172/15
f 106/172/15 109/176/15 110/173/15
f 110/173/15 112/252/15 108/171/15
f 112/174/21 97/182/21 102/170/21
f 106/172/19 103/178/19 100/169/19
f 106/172/18 105/255/18 104/177/18
f 102/179/17 101/249/17 108/166/17
f 112/174/14 111/256/14 98/181/14
f 100/183/13 99/250/13 110/184/13
f 110/184/16 99/250/16 98/186/16
f 124/188/20 117/257/20 120/189/20
f 118/192/12 113/204/12 114/208/12
f 114/208/12 115/258/12 116/191/12
f 116/191/12 119/200/12 120/189/12
f 120/189/12 117/257/12 118/192/12
f 118/192/12 114/208/12 116/191/12
f 126/195/15 127/259/15 128/260/15
f 128/260/15 123/261/15 124/193/15
f 124/193/15 121/262/15 122/194/15
f 122/194/15 125/198/15 126/195/15
f 126/195/15 128/260/15 124/193/15
f 128/196/21 113/204/21 118/192/21
f 122/194/19 119/200/19 116/191/19
f 122/194/18 121/263/18 120/199/18
f 118/201/17 117/257/17 124/188/17
f 128/196/14 127/264/14 114/203/14
f 116/205/13 115/258/13 126/206/13
f 126/206/16 115/258/16 114/208/16
f 64/105/12 70/106/12 78/107/12
f 91/108/13 82/109/13 59/110/13
f 76/111/14 59/112/14 82/113/14
f 76/114/15 72/115/15 66/116/15
f 80/117/15 71/118/15 82/119/15
f 66/120/16 68/121/16 73/122/16
f 66/120/13 64/105/13 63/123/13
f 68/124/14 74/125/14 73/126/14
f 78/127/17 76/128/17 75/129/17
f 70/130/18 72/115/18 71/131/18
f 72/115/19 64/105/19 65/132/19
f 83/133/18 81/134/18 86/135/18
f 85/136/20 79/137/20 84/138/20
f 71/139/13 62/140/13 70/141/13
f 83/133/15 92/142/15 100/143/15
f 70/144/12 58/145/12 85/146/12
f 98/147/21 94/148/21 89/149/21
f 86/150/17 84/138/17 83/151/17
f 57/152/18 80/117/18 79/137/18
f 80/117/19 62/140/19 61/153/19
f 96/154/14 60/155/14 100/156/14
f 67/157/13 88/158/13 74/159/13
f 88/158/16 90/160/16 93/161/16
f 91/162/12 86/135/12 103/163/12
f 90/164/14 94/148/14 93/165/14
f 98/147/17 96/166/17 95/167/17
f 75/168/18 91/169/18 78/170/18
f 93/171/15 95/172/15 92/173/15
f 104/174/21 100/156/21 60/155/21
f 103/175/20 99/176/20 102/177/20
f 97/178/12 89/179/12 87/180/12
f 104/174/17 102/177/17 101/181/17
f 116/182/20 112/183/20 113/184/20
f 108/185/12 112/183/12 110/186/12
f 116/187/15 114/188/15 118/189/15
f 120/190/21 110/186/21 115/191/21
f 114/188/19 108/185/19 117/192/19
f 114/188/18 112/193/18 111/194/18
f 110/195/17 116/182/17 115/196/17
f 120/190/14 106/197/14 105/198/14
f 108/199/13 118/200/13 117/201/13
f 118/200/16 106/202/16 119/203/16
f 132/204/20 128/205/20 129/206/20
f 124/207/12 128/205/12 126/208/12
f 132/209/15 130/210/15 134/211/15
f 136/212/21 126/208/21 131/213/21
f 130/210/19 124/207/19 133/214/19
f 130/210/18 128/215/18 127/216/18
f 126/217/17 132/204/17 131/218/17
f 136/212/14 122/219/14 121/220/14
f 124/221/13 134/222/13 133/223/13
f 134/222/16 122/224/16 135/225/16
f 78/107/12 67/226/12 68/227/12
f 68/227/12 63/228/12 64/105/12
f 64/105/12 69/229/12 70/106/12
f 70/106/12 77/230/12 78/107/12
f 78/107/12 68/227/12 64/105/12
f 91/108/13 92/231/13 82/109/13
f 76/111/14 77/232/14 59/112/14
f 66/116/15 73/233/15 74/234/15
f 74/234/15 75/235/15 76/114/15
f 76/114/15 71/236/15 72/115/15
f 72/115/15 65/132/15 66/116/15
f 66/116/15 74/234/15 76/114/15
f 82/119/15 83/237/15 84/238/15
f 84/238/15 79/239/15 80/117/15
f 80/117/15 61/153/15 71/118/15
f 71/118/15 76/240/15 82/119/15
f 82/119/15 84/238/15 80/117/15
f 66/120/16 63/123/16 68/121/16
f 66/120/13 65/132/13 64/105/13
f 68/124/14 67/241/14 74/125/14
f 78/127/17 77/242/17 76/128/17
f 70/130/18 69/229/18 72/115/18
f 72/115/19 69/229/19 64/105/19
f 83/133/18 99/176/18 81/134/18
f 85/136/20 57/152/20 79/137/20
f 71/139/13 61/153/13 62/140/13
f 100/143/15 101/243/15 102/244/15
f 102/244/15 99/245/15 83/133/15
f 83/133/15 82/109/15 92/142/15
f 92/142/15 96/246/15 100/143/15
f 100/143/15 102/244/15 83/133/15
f 85/146/12 86/247/12 59/248/12
f 59/248/12 77/249/12 70/144/12
f 70/144/12 62/140/12 58/145/12
f 58/145/12 57/250/12 85/146/12
f 85/146/12 59/248/12 70/144/12
f 98/147/21 95/167/21 94/148/21
f 86/150/17 85/136/17 84/138/17
f 57/152/18 58/145/18 80/117/18
f 80/117/19 58/145/19 62/140/19
f 96/154/14 97/251/14 60/155/14
f 67/157/13 87/252/13 88/158/13
f 88/158/16 87/252/16 90/160/16
f 103/163/12 104/253/12 60/254/12
f 60/254/12 97/255/12 91/162/12
f 91/162/12 59/110/12 86/135/12
f 86/135/12 81/256/12 103/163/12
f 103/163/12 60/254/12 91/162/12
f 90/164/14 89/149/14 94/148/14
f 98/147/17 97/257/17 96/166/17
f 75/168/18 92/258/18 91/169/18
f 92/173/15 75/168/15 74/159/15
f 74/159/15 88/259/15 93/171/15
f 93/171/15 94/260/15 95/172/15
f 95/172/15 96/261/15 92/173/15
f 92/173/15 74/159/15 93/171/15
f 104/174/21 101/181/21 100/156/21
f 103/175/20 81/134/20 99/176/20
f 87/180/12 67/157/12 78/170/12
f 78/170/12 91/262/12 97/178/12
f 97/178/12 98/263/12 89/179/12
f 89/179/12 90/264/12 87/180/12
f 87/180/12 78/170/12 97/178/12
f 104/174/17 103/175/17 102/177/17
f 116/182/20 109/265/20 112/183/20
f 110/186/12 105/198/12 106/202/12
f 106/202/12 107/266/12 108/185/12
f 108/185/12 111/194/12 112/183/12
f 112/183/12 109/265/12 110/186/12
f 110/186/12 106/202/12 108/185/12
f 118/189/15 119/267/15 120/268/15
f 120/268/15 115/269/15 116/187/15
f 116/187/15 113/270/15 114/188/15
f 114/188/15 117/192/15 118/189/15
f 118/189/15 120/268/15 116/187/15
f 120/190/21 105/198/21 110/186/21
f 114/188/19 111/194/19 108/185/19
f 114/188/18 113/271/18 112/193/18
f 110/195/17 109/265/17 116/182/17
f 120/190/14 119/272/14 106/197/14
f 108/199/13 107/266/13 118/200/13
f 118/200/16 107/266/16 106/202/16
f 132/204/20 125/273/20 128/205/20
f 126/208/12 121/220/12 122/224/12
f 122/224/12 123/274/12 124/207/12
f 124/207/12 127/216/12 128/205/12
f 128/205/12 125/273/12 126/208/12
f 126/208/12 122/224/12 124/207/12
f 134/211/15 135/275/15 136/276/15
f 136/276/15 131/277/15 132/209/15
f 132/209/15 129/278/15 130/210/15
f 130/210/15 133/214/15 134/211/15
f 134/211/15 136/276/15 132/209/15
f 136/212/21 121/220/21 126/208/21
f 130/210/19 127/216/19 124/207/19
f 130/210/18 129/279/18 128/215/18
f 126/217/17 125/273/17 132/204/17
f 136/212/14 135/280/14 122/219/14
f 124/221/13 123/274/13 134/222/13
f 134/222/16 123/274/16 122/224/16
o Socket
v -1.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
@ -1037,199 +1073,199 @@ vn -0.7099 0.7043 0.0000
vn 0.7099 -0.7043 0.0000
vn -0.7071 -0.7071 0.0000
s off
f 131/265/22 130/266/22 129/267/22
f 136/268/23 151/269/23 134/270/23
f 131/265/24 140/271/24 132/272/24
f 130/266/25 138/273/25 129/267/25
f 132/272/26 139/274/26 130/266/26
f 129/267/23 137/275/23 131/265/23
f 135/276/27 138/277/27 133/278/27
f 133/278/27 139/274/27 134/279/27
f 134/279/27 140/280/27 136/281/27
f 136/281/27 137/282/27 135/276/27
f 142/283/26 143/284/26 141/285/26
f 145/286/23 147/287/23 146/288/23
f 151/269/27 149/289/27 150/290/27
f 143/284/27 146/288/27 141/285/27
f 144/291/24 145/286/24 143/284/24
f 141/285/25 147/292/25 142/293/25
f 133/294/26 149/289/26 135/295/26
f 135/296/25 152/297/25 136/298/25
f 134/299/24 150/290/24 133/300/24
f 154/301/26 155/302/26 153/303/26
f 157/304/23 159/305/23 158/306/23
f 155/302/27 158/306/27 153/303/27
f 156/307/24 157/304/24 155/302/24
f 153/303/25 159/308/25 154/309/25
f 162/310/23 163/311/23 161/312/23
f 165/313/26 167/314/26 166/315/26
f 163/311/27 166/315/27 161/312/27
f 164/316/25 165/313/25 163/311/25
f 161/312/24 167/317/24 162/318/24
f 170/319/23 171/320/23 169/321/23
f 173/322/26 175/323/26 174/324/26
f 171/320/27 174/324/27 169/321/27
f 172/325/25 173/322/25 171/320/25
f 169/321/24 175/326/24 170/327/24
f 178/328/24 179/329/24 177/330/24
f 181/331/25 183/332/25 182/333/25
f 179/329/27 182/333/27 177/330/27
f 180/334/23 181/331/23 179/329/23
f 177/330/26 183/335/26 178/336/26
f 186/337/24 187/338/24 185/339/24
f 189/340/25 191/341/25 190/342/25
f 187/338/27 190/342/27 185/339/27
f 188/343/23 189/340/23 187/338/23
f 185/339/26 191/344/26 186/345/26
f 194/346/25 195/347/25 193/348/25
f 197/349/24 199/350/24 198/351/24
f 195/347/27 198/351/27 193/348/27
f 196/352/26 197/349/26 195/347/26
f 193/348/23 199/353/23 194/354/23
f 202/355/25 203/356/25 201/357/25
f 205/358/24 207/359/24 206/360/24
f 203/356/27 206/360/27 201/357/27
f 204/361/26 205/358/26 203/356/26
f 201/357/23 207/362/23 202/363/23
f 210/364/24 225/365/24 209/366/24
f 224/367/27 222/368/27 223/369/27
f 220/370/27 218/371/27 219/372/27
f 216/373/24 221/374/24 217/375/24
f 215/376/25 219/377/25 214/378/25
f 217/375/26 220/370/26 215/376/26
f 214/379/23 218/380/23 216/373/23
f 211/381/25 223/382/25 212/383/25
f 209/366/26 224/367/26 211/381/26
f 212/384/23 222/385/23 210/364/23
f 227/386/24 241/387/24 226/388/24
f 240/389/27 238/390/27 239/391/27
f 236/392/27 234/393/27 235/394/27
f 232/395/24 237/396/24 233/397/24
f 231/398/25 235/399/25 230/400/25
f 233/397/26 236/392/26 231/398/26
f 230/401/23 234/402/23 232/395/23
f 228/403/25 239/404/25 229/405/25
f 226/388/26 240/389/26 228/403/26
f 229/406/23 238/407/23 227/386/23
f 242/408/27 243/409/27 213/410/27
f 242/408/28 246/411/28 244/412/28
f 245/413/26 248/414/26 246/411/26
f 243/409/29 249/415/29 213/410/29
f 250/416/23 251/417/23 249/415/23
f 254/418/27 255/419/27 253/420/27
f 254/418/28 258/421/28 256/422/28
f 257/423/26 260/424/26 258/421/26
f 255/419/29 261/425/29 253/420/29
f 262/426/23 263/427/23 261/425/23
f 217/375/22 214/428/22 216/429/22
f 233/397/22 230/430/22 232/431/22
f 228/403/22 227/432/22 226/388/22
f 211/381/22 210/433/22 209/366/22
f 266/434/26 267/435/26 268/436/26
f 268/436/30 274/437/30 276/438/30
f 269/439/23 272/440/23 271/441/23
f 271/441/31 275/442/31 273/443/31
f 274/437/22 275/442/22 276/438/22
f 278/444/26 279/445/26 280/446/26
f 280/446/30 286/447/30 288/448/30
f 281/449/23 284/450/23 283/451/23
f 283/451/31 287/452/31 285/453/31
f 286/447/22 287/452/22 288/448/22
f 131/265/22 132/272/22 130/266/22
f 136/268/23 152/297/23 151/269/23
f 131/265/24 137/454/24 140/271/24
f 130/266/25 139/455/25 138/273/25
f 132/272/26 140/280/26 139/274/26
f 129/267/23 138/456/23 137/275/23
f 135/276/27 137/282/27 138/277/27
f 133/278/27 138/277/27 139/274/27
f 134/279/27 139/274/27 140/280/27
f 136/281/27 140/280/27 137/282/27
f 142/283/26 144/457/26 143/284/26
f 145/286/23 148/458/23 147/287/23
f 151/269/27 152/297/27 149/289/27
f 143/284/27 145/286/27 146/288/27
f 144/291/24 148/459/24 145/286/24
f 141/285/25 146/288/25 147/292/25
f 133/294/26 150/290/26 149/289/26
f 135/296/25 149/289/25 152/297/25
f 134/299/24 151/269/24 150/290/24
f 154/301/26 156/460/26 155/302/26
f 157/304/23 160/461/23 159/305/23
f 155/302/27 157/304/27 158/306/27
f 156/307/24 160/462/24 157/304/24
f 153/303/25 158/306/25 159/308/25
f 162/310/23 164/463/23 163/311/23
f 165/313/26 168/464/26 167/314/26
f 163/311/27 165/313/27 166/315/27
f 164/316/25 168/465/25 165/313/25
f 161/312/24 166/315/24 167/317/24
f 170/319/23 172/466/23 171/320/23
f 173/322/26 176/467/26 175/323/26
f 171/320/27 173/322/27 174/324/27
f 172/325/25 176/468/25 173/322/25
f 169/321/24 174/324/24 175/326/24
f 178/328/24 180/469/24 179/329/24
f 181/331/25 184/470/25 183/332/25
f 179/329/27 181/331/27 182/333/27
f 180/334/23 184/471/23 181/331/23
f 177/330/26 182/333/26 183/335/26
f 186/337/24 188/472/24 187/338/24
f 189/340/25 192/473/25 191/341/25
f 187/338/27 189/340/27 190/342/27
f 188/343/23 192/474/23 189/340/23
f 185/339/26 190/342/26 191/344/26
f 194/346/25 196/475/25 195/347/25
f 197/349/24 200/476/24 199/350/24
f 195/347/27 197/349/27 198/351/27
f 196/352/26 200/477/26 197/349/26
f 193/348/23 198/351/23 199/353/23
f 202/355/25 204/478/25 203/356/25
f 205/358/24 208/479/24 207/359/24
f 203/356/27 205/358/27 206/360/27
f 204/361/26 208/480/26 205/358/26
f 201/357/23 206/360/23 207/362/23
f 210/364/24 222/385/24 225/365/24
f 224/367/27 225/365/27 222/368/27
f 220/370/27 221/374/27 218/371/27
f 216/373/24 218/380/24 221/374/24
f 215/376/25 220/370/25 219/377/25
f 217/375/26 221/374/26 220/370/26
f 214/379/23 219/481/23 218/380/23
f 211/381/25 224/367/25 223/382/25
f 209/366/26 225/365/26 224/367/26
f 212/384/23 223/482/23 222/385/23
f 227/386/24 238/407/24 241/387/24
f 240/389/27 241/387/27 238/390/27
f 236/392/27 237/396/27 234/393/27
f 232/395/24 234/402/24 237/396/24
f 231/398/25 236/392/25 235/399/25
f 233/397/26 237/396/26 236/392/26
f 230/401/23 235/483/23 234/402/23
f 228/403/25 240/389/25 239/404/25
f 226/388/26 241/387/26 240/389/26
f 229/406/23 239/484/23 238/407/23
f 242/408/27 244/412/27 243/409/27
f 242/408/28 245/413/28 246/411/28
f 245/413/26 247/485/26 248/414/26
f 243/409/29 250/416/29 249/415/29
f 250/416/23 252/486/23 251/417/23
f 254/418/27 256/422/27 255/419/27
f 254/418/28 257/423/28 258/421/28
f 257/423/26 259/487/26 260/424/26
f 255/419/29 262/426/29 261/425/29
f 262/426/23 264/488/23 263/427/23
f 217/375/22 215/376/22 214/428/22
f 233/397/22 231/398/22 230/430/22
f 228/403/22 229/489/22 227/432/22
f 211/381/22 212/490/22 210/433/22
f 266/434/26 265/491/26 267/435/26
f 268/436/30 267/435/30 274/437/30
f 269/439/23 270/492/23 272/440/23
f 271/441/31 272/440/31 275/442/31
f 274/437/22 273/443/22 275/442/22
f 278/444/26 277/493/26 279/445/26
f 280/446/30 279/445/30 286/447/30
f 281/449/23 282/494/23 284/450/23
f 283/451/31 284/450/31 287/452/31
f 286/447/22 285/453/22 287/452/22
f 139/281/22 138/282/22 137/283/22
f 144/284/23 159/285/23 142/286/23
f 139/281/24 148/287/24 140/288/24
f 138/282/25 146/289/25 137/283/25
f 140/288/26 147/290/26 138/282/26
f 137/283/23 145/291/23 139/281/23
f 143/292/27 146/293/27 141/294/27
f 141/294/27 147/290/27 142/295/27
f 142/295/27 148/296/27 144/297/27
f 144/297/27 145/298/27 143/292/27
f 150/299/26 151/300/26 149/301/26
f 153/302/23 155/303/23 154/304/23
f 159/285/27 157/305/27 158/306/27
f 151/300/27 154/304/27 149/301/27
f 152/307/24 153/302/24 151/300/24
f 149/301/25 155/308/25 150/309/25
f 141/310/26 157/305/26 143/311/26
f 143/312/25 160/313/25 144/314/25
f 142/315/24 158/306/24 141/316/24
f 162/317/26 163/318/26 161/319/26
f 165/320/23 167/321/23 166/322/23
f 163/318/27 166/322/27 161/319/27
f 164/323/24 165/320/24 163/318/24
f 161/319/25 167/324/25 162/325/25
f 170/326/23 171/327/23 169/328/23
f 173/329/26 175/330/26 174/331/26
f 171/327/27 174/331/27 169/328/27
f 172/332/25 173/329/25 171/327/25
f 169/328/24 175/333/24 170/334/24
f 178/335/23 179/336/23 177/337/23
f 181/338/26 183/339/26 182/340/26
f 179/336/27 182/340/27 177/337/27
f 180/341/25 181/338/25 179/336/25
f 177/337/24 183/342/24 178/343/24
f 186/344/24 187/345/24 185/346/24
f 189/347/25 191/348/25 190/349/25
f 187/345/27 190/349/27 185/346/27
f 188/350/23 189/347/23 187/345/23
f 185/346/26 191/351/26 186/352/26
f 194/353/24 195/354/24 193/355/24
f 197/356/25 199/357/25 198/358/25
f 195/354/27 198/358/27 193/355/27
f 196/359/23 197/356/23 195/354/23
f 193/355/26 199/360/26 194/361/26
f 202/362/25 203/363/25 201/364/25
f 205/365/24 207/366/24 206/367/24
f 203/363/27 206/367/27 201/364/27
f 204/368/26 205/365/26 203/363/26
f 201/364/23 207/369/23 202/370/23
f 210/371/25 211/372/25 209/373/25
f 213/374/24 215/375/24 214/376/24
f 211/372/27 214/376/27 209/373/27
f 212/377/26 213/374/26 211/372/26
f 209/373/23 215/378/23 210/379/23
f 218/380/24 233/381/24 217/382/24
f 232/383/27 230/384/27 231/385/27
f 228/386/27 226/387/27 227/388/27
f 224/389/24 229/390/24 225/391/24
f 223/392/25 227/393/25 222/394/25
f 225/391/26 228/386/26 223/392/26
f 222/395/23 226/396/23 224/389/23
f 219/397/25 231/398/25 220/399/25
f 217/382/26 232/383/26 219/397/26
f 220/400/23 230/401/23 218/380/23
f 235/402/24 249/403/24 234/404/24
f 248/405/27 246/406/27 247/407/27
f 244/408/27 242/409/27 243/410/27
f 240/411/24 245/412/24 241/413/24
f 239/414/25 243/415/25 238/416/25
f 241/413/26 244/408/26 239/414/26
f 238/417/23 242/418/23 240/411/23
f 236/419/25 247/420/25 237/421/25
f 234/404/26 248/405/26 236/419/26
f 237/422/23 246/423/23 235/402/23
f 250/424/27 251/425/27 221/426/27
f 250/424/28 254/427/28 252/428/28
f 253/429/26 256/430/26 254/427/26
f 251/425/29 257/431/29 221/426/29
f 258/432/23 259/433/23 257/431/23
f 262/434/27 263/435/27 261/436/27
f 262/434/28 266/437/28 264/438/28
f 265/439/26 268/440/26 266/437/26
f 263/435/29 269/441/29 261/436/29
f 270/442/23 271/443/23 269/441/23
f 225/391/22 222/444/22 224/445/22
f 241/413/22 238/446/22 240/447/22
f 236/419/22 235/448/22 234/404/22
f 219/397/22 218/449/22 217/382/22
f 274/450/26 275/451/26 276/452/26
f 276/452/30 282/453/30 284/454/30
f 277/455/23 280/456/23 279/457/23
f 279/457/31 283/458/31 281/459/31
f 282/453/22 283/458/22 284/454/22
f 286/460/26 287/461/26 288/462/26
f 288/462/30 294/463/30 296/464/30
f 289/465/23 292/466/23 291/467/23
f 291/467/31 295/468/31 293/469/31
f 294/463/22 295/468/22 296/464/22
f 139/281/22 140/288/22 138/282/22
f 144/284/23 160/313/23 159/285/23
f 139/281/24 145/470/24 148/287/24
f 138/282/25 147/471/25 146/289/25
f 140/288/26 148/296/26 147/290/26
f 137/283/23 146/472/23 145/291/23
f 143/292/27 145/298/27 146/293/27
f 141/294/27 146/293/27 147/290/27
f 142/295/27 147/290/27 148/296/27
f 144/297/27 148/296/27 145/298/27
f 150/299/26 152/473/26 151/300/26
f 153/302/23 156/474/23 155/303/23
f 159/285/27 160/313/27 157/305/27
f 151/300/27 153/302/27 154/304/27
f 152/307/24 156/475/24 153/302/24
f 149/301/25 154/304/25 155/308/25
f 141/310/26 158/306/26 157/305/26
f 143/312/25 157/305/25 160/313/25
f 142/315/24 159/285/24 158/306/24
f 162/317/26 164/476/26 163/318/26
f 165/320/23 168/477/23 167/321/23
f 163/318/27 165/320/27 166/322/27
f 164/323/24 168/478/24 165/320/24
f 161/319/25 166/322/25 167/324/25
f 170/326/23 172/479/23 171/327/23
f 173/329/26 176/480/26 175/330/26
f 171/327/27 173/329/27 174/331/27
f 172/332/25 176/481/25 173/329/25
f 169/328/24 174/331/24 175/333/24
f 178/335/23 180/482/23 179/336/23
f 181/338/26 184/483/26 183/339/26
f 179/336/27 181/338/27 182/340/27
f 180/341/25 184/484/25 181/338/25
f 177/337/24 182/340/24 183/342/24
f 186/344/24 188/485/24 187/345/24
f 189/347/25 192/486/25 191/348/25
f 187/345/27 189/347/27 190/349/27
f 188/350/23 192/487/23 189/347/23
f 185/346/26 190/349/26 191/351/26
f 194/353/24 196/488/24 195/354/24
f 197/356/25 200/489/25 199/357/25
f 195/354/27 197/356/27 198/358/27
f 196/359/23 200/490/23 197/356/23
f 193/355/26 198/358/26 199/360/26
f 202/362/25 204/491/25 203/363/25
f 205/365/24 208/492/24 207/366/24
f 203/363/27 205/365/27 206/367/27
f 204/368/26 208/493/26 205/365/26
f 201/364/23 206/367/23 207/369/23
f 210/371/25 212/494/25 211/372/25
f 213/374/24 216/495/24 215/375/24
f 211/372/27 213/374/27 214/376/27
f 212/377/26 216/496/26 213/374/26
f 209/373/23 214/376/23 215/378/23
f 218/380/24 230/401/24 233/381/24
f 232/383/27 233/381/27 230/384/27
f 228/386/27 229/390/27 226/387/27
f 224/389/24 226/396/24 229/390/24
f 223/392/25 228/386/25 227/393/25
f 225/391/26 229/390/26 228/386/26
f 222/395/23 227/497/23 226/396/23
f 219/397/25 232/383/25 231/398/25
f 217/382/26 233/381/26 232/383/26
f 220/400/23 231/498/23 230/401/23
f 235/402/24 246/423/24 249/403/24
f 248/405/27 249/403/27 246/406/27
f 244/408/27 245/412/27 242/409/27
f 240/411/24 242/418/24 245/412/24
f 239/414/25 244/408/25 243/415/25
f 241/413/26 245/412/26 244/408/26
f 238/417/23 243/499/23 242/418/23
f 236/419/25 248/405/25 247/420/25
f 234/404/26 249/403/26 248/405/26
f 237/422/23 247/500/23 246/423/23
f 250/424/27 252/428/27 251/425/27
f 250/424/28 253/429/28 254/427/28
f 253/429/26 255/501/26 256/430/26
f 251/425/29 258/432/29 257/431/29
f 258/432/23 260/502/23 259/433/23
f 262/434/27 264/438/27 263/435/27
f 262/434/28 265/439/28 266/437/28
f 265/439/26 267/503/26 268/440/26
f 263/435/29 270/442/29 269/441/29
f 270/442/23 272/504/23 271/443/23
f 225/391/22 223/392/22 222/444/22
f 241/413/22 239/414/22 238/446/22
f 236/419/22 237/505/22 235/448/22
f 219/397/22 220/506/22 218/449/22
f 274/450/26 273/507/26 275/451/26
f 276/452/30 275/451/30 282/453/30
f 277/455/23 278/508/23 280/456/23
f 279/457/31 280/456/31 283/458/31
f 282/453/22 281/459/22 283/458/22
f 286/460/26 285/509/26 287/461/26
f 288/462/30 287/461/30 294/463/30
f 289/465/23 290/510/23 292/466/23
f 291/467/31 292/466/31 295/468/31
f 294/463/22 293/469/22 295/468/22

View File

@ -47,9 +47,9 @@ vt 1.000000 0.785714
vt 1.000000 0.214286
vt 0.681818 0.285714
vt 0.954545 0.285714
vt 0.954545 0.267857
vt 0.954545 0.285714
vt 0.681818 0.714286
vt 0.681818 0.267857
vt 0.681818 0.285714
vt 0.500000 0.107143
vt 0.772727 0.035714
vt 0.772727 0.107143

View File

@ -27,6 +27,7 @@
"block.debris": {"category": "block", "sounds": ["block/debris1", "block/debris2", "block/debris3"]},
"block.centrifugeOperate": {"category": "block", "sounds": [{"name": "block/centrifugeOperate", "stream": false}]},
"block.pipePlaced": {"category": "block", "sounds": [{"name": "block/pipePlaced", "stream": false}]},
"block.flesh": {"category": "block", "sounds": ["block/flesh1", "block/flesh2", "block/flesh4", "block/flesh5"]},
"block.missileAssembly": {"category": "block", "sounds": [{"name": "block/missileAssembly", "stream": false}]},
"block.missileAssembly2": {"category": "block", "sounds": [{"name": "block/missileAssembly2", "stream": false}]},
"block.openDoor": {"category": "block", "sounds": ["block/door_open_1", "block/door_open_2"]},
@ -324,6 +325,8 @@
"step.iron_land": {"category": "player", "sounds": [{"name": "footsteps/iron_land", "stream": false}]},
"step.iron": {"category": "player", "sounds": ["footsteps/iron1", "footsteps/iron2", "footsteps/iron3", "footsteps/iron4"]},
"step.metalBlock": {"category": "block", "sounds": ["footsteps/metalStep1", "footsteps/metalStep2", "footsteps/metalStep3", "footsteps/metalStep4"]},
"step.platemetal": {"category": "block", "sounds": ["block/platemetal_step"]},
"block.platemetalPlace": {"category": "block", "sounds": ["block/platemetal_bar1", "block/platemetal_bar2", "block/platemetal_bar3", "block/platemetal_bar4", "block/platemetal_bar5", "block/platemetal_bar6"]},
"step.powered": {"category": "player", "sounds": ["footsteps/powered1", "footsteps/powered2", "footsteps/powered3"]},
"player.vomit": {"category": "player", "sounds": [{"name": "player/vomit", "stream": false}]},

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More