Merge remote-tracking branch 'HbmMods/master'
@ -6,6 +6,7 @@ import com.hbm.items.ModItems;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.entity.EntityAgeable;
|
||||
import net.minecraft.entity.EntityLeashKnot;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.boss.IBossDisplayData;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@ -134,7 +135,10 @@ public class EntityQuackos extends EntityDuck implements IBossDisplayData {
|
||||
public float getShadowSize() {
|
||||
return 7.5F;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* BOW
|
||||
*/
|
||||
@Override
|
||||
public void onLivingUpdate() {
|
||||
super.onLivingUpdate();
|
||||
@ -143,4 +147,13 @@ public class EntityQuackos extends EntityDuck implements IBossDisplayData {
|
||||
this.setPosition(this.posX + rand.nextGaussian() * 30, 256, this.posZ + rand.nextGaussian() * 30);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateLeashedState() {
|
||||
|
||||
if(this.getLeashedToEntity() instanceof EntityLeashKnot)
|
||||
this.getLeashedToEntity().setDead();
|
||||
|
||||
super.updateLeashedState();
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,6 +274,21 @@ public class BobmazonOfferFactory {
|
||||
new ItemStack(ModItems.pipe_lead).setStackDisplayName("Get Nutted, Dumbass"),
|
||||
new ItemStack(ModItems.gem_alexandrite)
|
||||
).setStackDisplayName("The Nut Bucket"), Requirement.HIDDEN, 64));
|
||||
|
||||
special.add(new Offer(ItemKitNBT.create(
|
||||
new ItemStack(ModItems.rpa_helmet),
|
||||
new ItemStack(ModItems.rpa_plate),
|
||||
new ItemStack(ModItems.rpa_legs),
|
||||
new ItemStack(ModItems.rpa_boots),
|
||||
new ItemStack(ModItems.gun_lacunae),
|
||||
new ItemStack(ModItems.ammo_5mm_star, 64),
|
||||
new ItemStack(ModItems.ammo_5mm_star, 64),
|
||||
new ItemStack(ModItems.ammo_5mm_star, 64),
|
||||
new ItemStack(ModItems.ammo_5mm_star, 64),
|
||||
new ItemStack(ModItems.ammo_5mm_star, 64),
|
||||
new ItemStack(ModItems.ammo_5mm_star, 64),
|
||||
new ItemStack(ModItems.ammo_5mm_star, 64)
|
||||
).setStackDisplayName("Frenchman's Reward"), Requirement.HIDDEN, 32));
|
||||
}
|
||||
|
||||
public static List<Offer> getOffers(ItemStack stack) {
|
||||
|
||||
@ -210,6 +210,7 @@ public class BulletConfigSyncingUtil {
|
||||
public static int NUKE_TOTS = i++;
|
||||
public static int NUKE_SAFE = i++;
|
||||
public static int NUKE_PUMPKIN = i++;
|
||||
public static int NUKE_BARREL = i++;
|
||||
public static int NUKE_PROTO_NORMAL = i++;
|
||||
public static int NUKE_PROTO_LOW = i++;
|
||||
public static int NUKE_PROTO_HIGH = i++;
|
||||
@ -451,6 +452,7 @@ public class BulletConfigSyncingUtil {
|
||||
configSet.put(NUKE_TOTS, GunFatmanFactory.getNukeTotsConfig());
|
||||
configSet.put(NUKE_SAFE, GunFatmanFactory.getNukeSafeConfig());
|
||||
configSet.put(NUKE_PUMPKIN, GunFatmanFactory.getNukePumpkinConfig());
|
||||
configSet.put(NUKE_BARREL, GunFatmanFactory.getNukeBarrelConfig());
|
||||
configSet.put(NUKE_PROTO_NORMAL, GunFatmanFactory.getNukeConfig().accuracyMod(20F));
|
||||
configSet.put(NUKE_PROTO_LOW, GunFatmanFactory.getNukeLowConfig().accuracyMod(20F));
|
||||
configSet.put(NUKE_PROTO_HIGH, GunFatmanFactory.getNukeHighConfig().accuracyMod(20F));
|
||||
|
||||
@ -120,6 +120,7 @@ public class BulletConfiguration {
|
||||
public static final int STYLE_METEOR = 13;
|
||||
public static final int STYLE_APDS = 14;
|
||||
public static final int STYLE_BLADE = 15;
|
||||
public static final int STYLE_BARREL = 16;
|
||||
|
||||
public static final int PLINK_NONE = 0;
|
||||
public static final int PLINK_BULLET = 1;
|
||||
|
||||
@ -2,6 +2,7 @@ package com.hbm.handler.guncfg;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.entity.projectile.EntityBulletBase;
|
||||
import com.hbm.explosion.ExplosionLarge;
|
||||
import com.hbm.explosion.ExplosionNT;
|
||||
@ -9,6 +10,7 @@ import com.hbm.explosion.ExplosionNT.ExAttrib;
|
||||
import com.hbm.handler.BulletConfigSyncingUtil;
|
||||
import com.hbm.handler.BulletConfiguration;
|
||||
import com.hbm.handler.GunConfiguration;
|
||||
import com.hbm.handler.radiation.ChunkRadiationManager;
|
||||
import com.hbm.interfaces.IBulletImpactBehavior;
|
||||
import com.hbm.interfaces.IBulletUpdateBehavior;
|
||||
import com.hbm.items.ModItems;
|
||||
@ -17,7 +19,9 @@ import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.render.util.RenderScreenOverlay.Crosshair;
|
||||
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class GunFatmanFactory {
|
||||
|
||||
@ -213,7 +217,7 @@ public class GunFatmanFactory {
|
||||
@Override
|
||||
public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) {
|
||||
|
||||
if(bullet.worldObj.isRemote) {
|
||||
if(!bullet.worldObj.isRemote) {
|
||||
|
||||
double posX = bullet.posX;
|
||||
double posY = bullet.posY + 0.5;
|
||||
@ -233,6 +237,63 @@ public class GunFatmanFactory {
|
||||
return bullet;
|
||||
}
|
||||
|
||||
public static BulletConfiguration getNukeBarrelConfig() {
|
||||
|
||||
BulletConfiguration bullet = BulletConfigFactory.standardNukeConfig();
|
||||
bullet.ammo = ModItems.ammo_nuke_pumpkin;
|
||||
bullet.explosive = 3F;
|
||||
bullet.style = bullet.STYLE_BARREL;
|
||||
|
||||
bullet.bImpact = new IBulletImpactBehavior() {
|
||||
|
||||
@Override
|
||||
public void behaveBlockHit(EntityBulletBase bullet, int x, int y, int z) {
|
||||
|
||||
if(!bullet.worldObj.isRemote) {
|
||||
|
||||
double posX = bullet.posX;
|
||||
double posY = bullet.posY + 0.5;
|
||||
double posZ = bullet.posZ;
|
||||
|
||||
if(y >= 0) {
|
||||
posX = x + 0.5;
|
||||
posY = y + 1.5;
|
||||
posZ = z + 0.5;
|
||||
}
|
||||
|
||||
x = (int)Math.floor(posX);
|
||||
y = (int)Math.floor(posY);
|
||||
z = (int)Math.floor(posZ);
|
||||
|
||||
World worldObj = bullet.worldObj;
|
||||
|
||||
for(int ix = x - 3; ix <= x + 3; ix++) {
|
||||
for(int iy = y - 3; iy <= y + 3; iy++) {
|
||||
for(int iz = z - 3; iz <= z + 3; iz++) {
|
||||
|
||||
if(worldObj.rand.nextInt(3) == 0 && worldObj.getBlock(ix, iy, iz).isReplaceable(worldObj, ix, iy, iz) && ModBlocks.fallout.canPlaceBlockAt(worldObj, ix, iy, iz)) {
|
||||
worldObj.setBlock(ix, iy, iz, ModBlocks.fallout);
|
||||
} else if(worldObj.getBlock(ix, iy, iz) == Blocks.air) {
|
||||
|
||||
if(worldObj.rand.nextBoolean())
|
||||
worldObj.setBlock(ix, iy, iz, ModBlocks.gas_radon);
|
||||
else
|
||||
worldObj.setBlock(ix, iy, iz, ModBlocks.gas_radon_dense);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ChunkRadiationManager.proxy.incrementRad(worldObj, x, y, z, 100F);
|
||||
|
||||
ExplosionLarge.spawnParticles(bullet.worldObj, posX, posY, posZ, 45);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return bullet;
|
||||
}
|
||||
|
||||
public static BulletConfiguration getMirvConfig() {
|
||||
|
||||
BulletConfiguration bullet = getNukeConfig();
|
||||
|
||||
@ -950,15 +950,13 @@ public class AssemblerRecipes {
|
||||
}, 200);
|
||||
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_radiolysis), new AStack[] {
|
||||
new OreDictStack(STEEL.ingot(), 8),
|
||||
new OreDictStack(STEEL.ingot(), 12),
|
||||
new OreDictStack(TCALLOY.ingot(), 4),
|
||||
new ComparableStack(ModBlocks.steel_beam, 16),
|
||||
new OreDictStack(DURA.ingot(), 10),
|
||||
new OreDictStack(DESH.ingot(), 4),
|
||||
new OreDictStack(RUBBER.ingot(), 4),
|
||||
new OreDictStack(PB.plate(), 12),
|
||||
new ComparableStack(ModItems.board_copper, 4),
|
||||
new ComparableStack(ModItems.thermo_element, 10),
|
||||
new ComparableStack(ModItems.circuit_copper, 3),
|
||||
new ComparableStack(ModItems.wire_red_copper, 8),
|
||||
new ComparableStack(ModItems.tank_steel, 3)
|
||||
}, 200);
|
||||
|
||||
@ -162,7 +162,8 @@ public class RefineryRecipes {
|
||||
};
|
||||
ItemStack[] out = new ItemStack[] {
|
||||
ItemFluidIcon.make(recipe.getValue().getKey()),
|
||||
ItemFluidIcon.make(recipe.getValue().getValue())
|
||||
ItemFluidIcon.make(recipe.getValue().getValue()),
|
||||
ItemFluidIcon.make(Fluids.SPENTSTEAM, 2)
|
||||
};
|
||||
|
||||
recipes.put(in, recipe.getValue().getValue().type == Fluids.NONE ? ItemFluidIcon.make(recipe.getValue().getKey()) : out);
|
||||
|
||||
@ -1551,6 +1551,7 @@ public class ModItems {
|
||||
public static Item ammo_nuke_tots;
|
||||
public static Item ammo_nuke_safe;
|
||||
public static Item ammo_nuke_pumpkin;
|
||||
public static Item ammo_nuke_barrel;
|
||||
public static Item ammo_mirv;
|
||||
public static Item ammo_mirv_low;
|
||||
public static Item ammo_mirv_high;
|
||||
@ -4216,6 +4217,7 @@ public class ModItems {
|
||||
ammo_nuke_tots = new ItemAmmo().setUnlocalizedName("ammo_nuke_tots");
|
||||
ammo_nuke_safe = new ItemAmmo().setUnlocalizedName("ammo_nuke_safe");
|
||||
ammo_nuke_pumpkin = new ItemAmmo().setUnlocalizedName("ammo_nuke_pumpkin");
|
||||
ammo_nuke_barrel = new ItemAmmo().setUnlocalizedName("ammo_nuke_barrel");
|
||||
ammo_mirv = new ItemAmmo().setUnlocalizedName("ammo_mirv");
|
||||
ammo_mirv_low = new ItemAmmo().setUnlocalizedName("ammo_mirv_low");
|
||||
ammo_mirv_high = new ItemAmmo().setUnlocalizedName("ammo_mirv_high");
|
||||
@ -7251,6 +7253,7 @@ public class ModItems {
|
||||
GameRegistry.registerItem(ammo_nuke_tots, ammo_nuke_tots.getUnlocalizedName());
|
||||
GameRegistry.registerItem(ammo_nuke_safe, ammo_nuke_safe.getUnlocalizedName());
|
||||
GameRegistry.registerItem(ammo_nuke_pumpkin, ammo_nuke_pumpkin.getUnlocalizedName());
|
||||
GameRegistry.registerItem(ammo_nuke_barrel, ammo_nuke_barrel.getUnlocalizedName());
|
||||
GameRegistry.registerItem(ammo_mirv, ammo_mirv.getUnlocalizedName());
|
||||
GameRegistry.registerItem(ammo_mirv_low, ammo_mirv_low.getUnlocalizedName());
|
||||
GameRegistry.registerItem(ammo_mirv_high, ammo_mirv_high.getUnlocalizedName());
|
||||
|
||||
@ -7,8 +7,10 @@ import org.apache.logging.log4j.Level;
|
||||
import com.hbm.config.GeneralConfig;
|
||||
import com.hbm.interfaces.IBomb;
|
||||
import com.hbm.interfaces.IBomb.BombReturnCode;
|
||||
import com.hbm.interfaces.IHoldableWeapon;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.render.util.RenderScreenOverlay.Crosshair;
|
||||
import com.hbm.util.ChatBuilder;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@ -19,7 +21,7 @@ import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class ItemLaserDetonator extends Item {
|
||||
public class ItemLaserDetonator extends Item implements IHoldableWeapon {
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
|
||||
@ -70,4 +72,9 @@ public class ItemLaserDetonator extends Item {
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Crosshair getCrosshair() {
|
||||
return Crosshair.L_ARROWS;
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,7 +60,6 @@ public class Library {
|
||||
public static String Hoboy03new = "d7f29d9c-5103-4f6f-88e1-2632ff95973f";
|
||||
public static String Dragon59MC = "dc23a304-0f84-4e2d-b47d-84c8d3bfbcdb";
|
||||
public static String Steelcourage = "ac49720b-4a9a-4459-a26f-bee92160287a";
|
||||
public static String GOD___TM = "57146e3f-16b5-4e9f-b0b8-139bec2ca2cb";
|
||||
public static String ZippySqrl = "03c20435-a229-489a-a1a1-671b803f7017";
|
||||
public static String Schrabby = "3a4a1944-5154-4e67-b80a-b6561e8630b7";
|
||||
public static String SweatySwiggs = "5544aa30-b305-4362-b2c1-67349bb499d5";
|
||||
@ -74,6 +73,7 @@ public class Library {
|
||||
public static String Tankish = "609268ad-5b34-49c2-abba-a9d83229af03";
|
||||
public static String SolsticeUnlimitd = "f5574fd2-ec28-4927-9d11-3c0c731771f4";
|
||||
public static String FrizzleFrazzle = "fc4cc2ee-12e8-4097-b26a-1c6cb1b96531";
|
||||
public static String the_NCR = "28ae585f-4431-4491-9ce8-3def6126e3c6";
|
||||
|
||||
public static Set<String> contributors = Sets.newHashSet(new String[] {
|
||||
"06ab7c03-55ce-43f8-9d3c-2850e3c652de", //mustang_rudolf
|
||||
|
||||
@ -52,6 +52,7 @@ public class ModDamageSource extends DamageSource {
|
||||
public static DamageSource mku = (new DamageSource("mku")).setDamageIsAbsolute().setDamageBypassesArmor();
|
||||
public static DamageSource vacuum = (new DamageSource("vacuum")).setDamageIsAbsolute().setDamageBypassesArmor();
|
||||
public static DamageSource overdose = (new DamageSource("overdose")).setDamageIsAbsolute().setDamageBypassesArmor();
|
||||
public static DamageSource microwave = (new DamageSource("microwave")).setDamageIsAbsolute().setDamageBypassesArmor();
|
||||
|
||||
public static final String s_bullet = "revolverBullet";
|
||||
public static final String s_emplacer = "chopperBullet";
|
||||
|
||||
@ -415,6 +415,7 @@ public class ClientProxy extends ServerProxy {
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_bolter_digamma, new ItemRenderWeaponBolter());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_fireext, new ItemRenderFireExt());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_ar15, new ItemRenderWeaponAR15());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.detonator_laser, new ItemRenderDetonatorLaser());
|
||||
//multitool
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.multitool_dig, new ItemRenderMultitool());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.multitool_silk, new ItemRenderMultitool());
|
||||
|
||||
@ -62,7 +62,6 @@ import com.hbm.util.EntityDamageUtil;
|
||||
import com.hbm.world.WorldProviderNTM;
|
||||
import com.hbm.world.generator.TimedGenerator;
|
||||
|
||||
import codechicken.lib.math.MathHelper;
|
||||
import cpw.mods.fml.common.eventhandler.Event.Result;
|
||||
import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
@ -114,6 +113,7 @@ import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.EntityDamageSource;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.FoodStats;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.EnumSkyBlock;
|
||||
import net.minecraft.world.World;
|
||||
@ -1004,9 +1004,10 @@ public class ModEventHandler {
|
||||
if(player.getCurrentArmor(2) == null && !player.onGround) {
|
||||
|
||||
boolean isBob = player.getUniqueID().toString().equals(Library.HbMinecraft) || player.getDisplayName().equals("HbMinecraft");
|
||||
boolean isSol = player.getUniqueID().toString().equals(Library.SolsticeUnlimitd) || player.getDisplayName().equals("SolsticeUnlimitd");
|
||||
boolean isOther = player.getUniqueID().toString().equals(Library.SolsticeUnlimitd) || player.getDisplayName().equals("SolsticeUnlimitd") ||
|
||||
player.getUniqueID().toString().equals(Library.the_NCR) || player.getDisplayName().equals("the_NCR");
|
||||
|
||||
if(isBob || isSol) {
|
||||
if(isBob || isOther) {
|
||||
|
||||
ArmorUtil.resetFlightTime(player);
|
||||
|
||||
@ -1029,7 +1030,7 @@ public class ModEventHandler {
|
||||
else
|
||||
player.motionY = cap + 0.15D;
|
||||
|
||||
if(isSol) {
|
||||
if(isOther) {
|
||||
if(player.getFoodStats().getSaturationLevel() > 0F)
|
||||
player.addExhaustion(4F); //burn up saturation so that super-saturating foods have no effect
|
||||
else
|
||||
@ -1045,7 +1046,7 @@ public class ModEventHandler {
|
||||
else if(player.motionY < 0)
|
||||
player.motionY = 0;
|
||||
|
||||
if(isSol && !player.onGround) {
|
||||
if(isOther && !player.onGround) {
|
||||
if(player.getFoodStats().getSaturationLevel() > 0F)
|
||||
player.addExhaustion(4F);
|
||||
else
|
||||
|
||||
@ -335,7 +335,9 @@ public class ModEventHandlerClient {
|
||||
if(player.getUniqueID().toString().equals(Library.SolsticeUnlimitd) || player.getDisplayName().equals("SolsticeUnlimitd"))
|
||||
RenderAccessoryUtility.renderSol(event);
|
||||
if(player.getUniqueID().toString().equals(Library.HbMinecraft) || player.getDisplayName().equals("HbMinecraft"))
|
||||
RenderAccessoryUtility.renderWings(event);
|
||||
RenderAccessoryUtility.renderWings(event, 2);
|
||||
if(player.getUniqueID().toString().equals(Library.the_NCR) || player.getDisplayName().equals("the_NCR"))
|
||||
RenderAccessoryUtility.renderWings(event, 3);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -624,6 +624,7 @@ public class ResourceManager {
|
||||
public static final IModelCustom mg42 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/mg42.obj"));
|
||||
public static final IModelCustom rem700 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/rem700.obj"));
|
||||
public static final IModelCustom cursed_revolver = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/cursed.obj"));
|
||||
public static final IModelCustom detonator_laser = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/detonator_laser.obj"));
|
||||
|
||||
public static final IModelCustom lance = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/lance.obj"));
|
||||
|
||||
@ -692,6 +693,7 @@ public class ResourceManager {
|
||||
public static final ResourceLocation sky_stinger_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sky_stinger.png");
|
||||
public static final ResourceLocation mg42_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/ff/mg42.png");
|
||||
public static final ResourceLocation rem700_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/ff/rem700.png");
|
||||
public static final ResourceLocation detonator_laser_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/detonator_laser.png");
|
||||
|
||||
public static final ResourceLocation lance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lance.png");
|
||||
|
||||
@ -756,6 +758,7 @@ public class ResourceManager {
|
||||
|
||||
public static final ResourceLocation wings_murk = new ResourceLocation(RefStrings.MODID, "textures/armor/wings_murk.png");
|
||||
public static final ResourceLocation wings_bob = new ResourceLocation(RefStrings.MODID, "textures/armor/wings_bob.png");
|
||||
public static final ResourceLocation wings_black = new ResourceLocation(RefStrings.MODID, "textures/armor/wings_black.png");
|
||||
public static final ResourceLocation wings_solstice = new ResourceLocation(RefStrings.MODID, "textures/armor/wings_solstice.png");
|
||||
|
||||
public static final ResourceLocation hat = new ResourceLocation(RefStrings.MODID, "textures/armor/hat.png");
|
||||
|
||||
@ -68,6 +68,7 @@ public class RenderBullet extends Render {
|
||||
case BulletConfiguration.STYLE_METEOR: renderMeteor(trail); break;
|
||||
case BulletConfiguration.STYLE_APDS: renderAPDS(); break;
|
||||
case BulletConfiguration.STYLE_BLADE: renderBlade(); break;
|
||||
case BulletConfiguration.STYLE_BARREL: renderNuke(3); break;
|
||||
default: renderBullet(trail); break;
|
||||
}
|
||||
|
||||
@ -217,6 +218,13 @@ public class RenderBullet extends Render {
|
||||
case 2:
|
||||
bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/models/BaleFlare.png"));
|
||||
bf.renderAll(0.0625F); break;
|
||||
case 3:
|
||||
GL11.glScaled(0.5, 0.5, 0.5);
|
||||
GL11.glRotated(90, 0, 0, 1);
|
||||
GL11.glRotated(90, 0, 1, 0);
|
||||
bindTexture(ResourceManager.waste_drum_tex);
|
||||
ResourceManager.waste_drum.renderAll();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
100
src/main/java/com/hbm/render/item/ItemRenderDetonatorLaser.java
Normal file
@ -0,0 +1,100 @@
|
||||
package com.hbm.render.item;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.render.anim.HbmAnimations;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
|
||||
import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
|
||||
|
||||
public class ItemRenderDetonatorLaser implements IItemRenderer {
|
||||
|
||||
@Override
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
||||
switch(type) {
|
||||
case EQUIPPED:
|
||||
case EQUIPPED_FIRST_PERSON:
|
||||
case ENTITY:
|
||||
case INVENTORY:
|
||||
return true;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
|
||||
|
||||
return type == ItemRenderType.ENTITY && (helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.detonator_laser_tex);
|
||||
|
||||
switch(type) {
|
||||
|
||||
case EQUIPPED_FIRST_PERSON:
|
||||
|
||||
double s0 = 0.25D;
|
||||
GL11.glScaled(s0, s0, s0);
|
||||
|
||||
GL11.glRotatef(80F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(-20F, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glTranslatef(1.0F, 0.5F, 3.0F);
|
||||
|
||||
break;
|
||||
|
||||
case EQUIPPED:
|
||||
|
||||
double scale = 0.125D;
|
||||
GL11.glScaled(-scale, -scale, -scale);
|
||||
GL11.glRotatef(85F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(145F, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glTranslatef(-0.5F, -1.0F, 6.5F);
|
||||
break;
|
||||
|
||||
case ENTITY:
|
||||
|
||||
double s1 = 0.25D;
|
||||
GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glScaled(s1, s1, s1);
|
||||
break;
|
||||
|
||||
case INVENTORY:
|
||||
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
|
||||
double s = 3.5D;
|
||||
GL11.glScaled(s, s, -s);
|
||||
GL11.glTranslatef(1.5F, 2.75F, 0.0F);
|
||||
GL11.glRotatef(180F, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(-45F, 1.0F, 0.0F, 0.0F);
|
||||
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
|
||||
ResourceManager.detonator_laser.renderPart("Main");
|
||||
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||
GL11.glColor3f(1F, 0F, 0F);
|
||||
ResourceManager.detonator_laser.renderPart("Lights");
|
||||
GL11.glColor3f(1F, 1F, 1F);
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
@ -160,9 +160,11 @@ public class ModelArmorWings extends ModelArmorBase {
|
||||
}
|
||||
|
||||
protected ResourceLocation getTexture() {
|
||||
|
||||
|
||||
if(this.type == 2)
|
||||
return ResourceManager.wings_bob;
|
||||
if(this.type == 3)
|
||||
return ResourceManager.wings_black;
|
||||
|
||||
return ResourceManager.wings_murk;
|
||||
}
|
||||
|
||||
@ -143,17 +143,17 @@ public class RenderAccessoryUtility {
|
||||
solModel.render(event.entityPlayer, 0.0F, 0.0F, yawWrapped, yaw, pitch, 0.0625F);
|
||||
}
|
||||
|
||||
private static ModelBiped wingModel;
|
||||
public static void renderWings(RenderPlayerEvent.SetArmorModel event) {
|
||||
private static ModelBiped[] wingModels = new ModelBiped[10];
|
||||
public static void renderWings(RenderPlayerEvent.SetArmorModel event, int mode) {
|
||||
|
||||
if(wingModel == null)
|
||||
wingModel = new ModelArmorWings(2);
|
||||
if(wingModels[mode] == null)
|
||||
wingModels[mode] = new ModelArmorWings(mode);
|
||||
|
||||
RenderPlayer renderer = event.renderer;
|
||||
ModelBiped model = renderer.modelArmor;
|
||||
EntityPlayer player = event.entityPlayer;
|
||||
|
||||
wingModel.isSneak = model.isSneak;
|
||||
wingModels[mode].isSneak = model.isSneak;
|
||||
|
||||
float interp = event.partialRenderTick;
|
||||
float yawHead = player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * interp;
|
||||
@ -162,6 +162,6 @@ public class RenderAccessoryUtility {
|
||||
float yawWrapped = MathHelper.wrapAngleTo180_float(yawHead - yawOffset);
|
||||
float pitch = player.rotationPitch;
|
||||
|
||||
wingModel.render(event.entityPlayer, 0.0F, 0.0F, yawWrapped, yaw, pitch, 0.0625F);
|
||||
wingModels[mode].render(event.entityPlayer, 0.0F, 0.0F, yawWrapped, yaw, pitch, 0.0625F);
|
||||
}
|
||||
}
|
||||
|
||||
17
src/main/java/com/hbm/sound/nt/ISoundSourceTE.java
Normal file
@ -0,0 +1,17 @@
|
||||
package com.hbm.sound.nt;
|
||||
|
||||
import net.minecraft.util.Vec3;
|
||||
|
||||
public interface ISoundSourceTE {
|
||||
|
||||
public Vec3 getSoundLocation();
|
||||
public boolean isPlaying();
|
||||
|
||||
public default float getVolume() {
|
||||
return 1F;
|
||||
}
|
||||
|
||||
public default float getPitch() {
|
||||
return 1F;
|
||||
}
|
||||
}
|
||||
90
src/main/java/com/hbm/sound/nt/SoundTE.java
Normal file
@ -0,0 +1,90 @@
|
||||
package com.hbm.sound.nt;
|
||||
|
||||
import net.minecraft.client.audio.ITickableSound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.Vec3;
|
||||
|
||||
public class SoundTE implements ITickableSound {
|
||||
|
||||
ISoundSourceTE source;
|
||||
|
||||
private ResourceLocation sound;
|
||||
private boolean canRepeat = true;
|
||||
private int repeatDelay = 0;
|
||||
private boolean donePlaying = true;
|
||||
private float soundX;
|
||||
private float soundY;
|
||||
private float soundZ;
|
||||
private float volume;
|
||||
private float pitch;
|
||||
|
||||
public SoundTE(String sound) {
|
||||
this.sound = new ResourceLocation(sound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getPositionedSoundLocation() {
|
||||
return this.sound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRepeat() {
|
||||
return this.canRepeat;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRepeatDelay() {
|
||||
return this.repeatDelay;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getVolume() {
|
||||
return this.volume;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getPitch() {
|
||||
return this.pitch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getXPosF() {
|
||||
return this.soundX;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getYPosF() {
|
||||
return this.soundY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getZPosF() {
|
||||
return this.soundZ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AttenuationType getAttenuationType() {
|
||||
return AttenuationType.LINEAR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
if(this.source == null)
|
||||
return;
|
||||
|
||||
this.volume = this.source.getVolume();
|
||||
this.pitch = this.source.getPitch();
|
||||
|
||||
Vec3 pos = this.source.getSoundLocation();
|
||||
this.soundX = (float) pos.xCoord;
|
||||
this.soundY = (float) pos.yCoord;
|
||||
this.soundZ = (float) pos.zCoord;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDonePlaying() {
|
||||
return this.donePlaying;
|
||||
}
|
||||
}
|
||||
@ -30,7 +30,7 @@ public class TileEntityHadronPower extends TileEntity implements IEnergyUser {
|
||||
@Override
|
||||
public void setPower(long i) {
|
||||
power = i;
|
||||
this.markDirty();
|
||||
this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.interfaces.IFluidAcceptor;
|
||||
import com.hbm.interfaces.IFluidSource;
|
||||
import com.hbm.inventory.FluidTank;
|
||||
@ -17,17 +16,13 @@ import com.hbm.inventory.recipes.ChemplantRecipes.ChemRecipe;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.packet.AuxParticlePacketNT;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.util.InventoryUtil;
|
||||
|
||||
import api.hbm.energy.IEnergyUser;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
@ -220,6 +215,9 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
|
||||
this.power -= this.consumption;
|
||||
this.progress++;
|
||||
|
||||
if(slots[0] != null && slots[0].getItem() == ModItems.meteorite_sword_machined)
|
||||
slots[0] = new ItemStack(ModItems.meteorite_sword_treated); //fisfndmoivndlmgindgifgjfdnblfm
|
||||
|
||||
ChemRecipe recipe = ChemplantRecipes.indexMapping.get(slots[4].getItemDamage());
|
||||
|
||||
this.maxProgress = recipe.getDuration() * this.speed / 100;
|
||||
@ -411,10 +409,9 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
|
||||
@Override
|
||||
public int getMaxFluidFill(FluidType type) {
|
||||
|
||||
for(FluidTank tank : tanks) {
|
||||
if(tank.getTankType() == type) {
|
||||
|
||||
return tank.getMaxFill();
|
||||
for(int i = 0; i < 2; i++) {
|
||||
if(tanks[i].getTankType() == type) {
|
||||
return tanks[i].getMaxFill();
|
||||
}
|
||||
}
|
||||
|
||||
@ -476,9 +473,6 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void handleButtonPacket(int value, int meta) { }
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.interfaces.IFluidAcceptor;
|
||||
import com.hbm.interfaces.IFluidSource;
|
||||
import com.hbm.inventory.FluidStack;
|
||||
@ -14,29 +13,28 @@ import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.recipes.RefineryRecipes;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.util.Tuple.Pair;
|
||||
import com.hbm.util.Tuple.Quartet;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import scala.actors.threadpool.Arrays;
|
||||
|
||||
public class TileEntityMachineCatalyticCracker extends TileEntity implements IFluidSource, IFluidAcceptor {
|
||||
|
||||
public FluidTank[] tanks;
|
||||
public List<IFluidAcceptor> list1 = new ArrayList();
|
||||
public List<IFluidAcceptor> list2 = new ArrayList();
|
||||
public List<IFluidAcceptor> list3 = new ArrayList();
|
||||
|
||||
public TileEntityMachineCatalyticCracker() {
|
||||
tanks = new FluidTank[4];
|
||||
tanks = new FluidTank[5];
|
||||
tanks[0] = new FluidTank(Fluids.BITUMEN, 4000, 0);
|
||||
tanks[1] = new FluidTank(Fluids.STEAM, 8000, 1);
|
||||
tanks[2] = new FluidTank(Fluids.OIL, 4000, 2);
|
||||
tanks[3] = new FluidTank(Fluids.PETROLEUM, 4000, 3);
|
||||
tanks[4] = new FluidTank(Fluids.SPENTSTEAM, 800, 4);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -52,6 +50,7 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl
|
||||
if(worldObj.getTotalWorldTime() % 10 == 0) {
|
||||
fillFluidInit(tanks[2].getTankType());
|
||||
fillFluidInit(tanks[3].getTankType());
|
||||
fillFluidInit(tanks[4].getTankType());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -70,12 +69,13 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl
|
||||
tanks[1].setFill(tanks[1].getFill() - 200);
|
||||
tanks[2].setFill(tanks[2].getFill() + left);
|
||||
tanks[3].setFill(tanks[3].getFill() + right);
|
||||
tanks[4].setFill(tanks[4].getFill() + 2); //LPS has the density of WATER not STEAM (1%!)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasSpace(int left, int right) {
|
||||
return tanks[2].getFill() + left <= tanks[2].getMaxFill() && tanks[3].getFill() + right <= tanks[3].getMaxFill();
|
||||
return tanks[2].getFill() + left <= tanks[2].getMaxFill() && tanks[3].getFill() + right <= tanks[3].getMaxFill() && tanks[4].getFill() + 200 <= tanks[4].getMaxFill();
|
||||
}
|
||||
|
||||
private void setupTanks() {
|
||||
@ -86,11 +86,13 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl
|
||||
tanks[1].setTankType(Fluids.STEAM);
|
||||
tanks[2].setTankType(quart.getKey().type);
|
||||
tanks[3].setTankType(quart.getValue().type);
|
||||
tanks[4].setTankType(Fluids.SPENTSTEAM);
|
||||
} else {
|
||||
tanks[0].setTankType(Fluids.NONE);
|
||||
tanks[1].setTankType(Fluids.NONE);
|
||||
tanks[2].setTankType(Fluids.NONE);
|
||||
tanks[3].setTankType(Fluids.NONE);
|
||||
tanks[4].setTankType(Fluids.NONE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,7 +100,7 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
for(int i = 0; i < 3; i++)
|
||||
for(int i = 0; i < 5; i++)
|
||||
tanks[i].readFromNBT(nbt, "tank" + i);
|
||||
}
|
||||
|
||||
@ -106,13 +108,13 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
for(int i = 0; i < 3; i++)
|
||||
for(int i = 0; i < 5; i++)
|
||||
tanks[i].writeToNBT(nbt, "tank" + i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFillForSync(int fill, int index) {
|
||||
if(index < 4 && tanks[index] != null)
|
||||
if(index < 5 && tanks[index] != null)
|
||||
tanks[index].setFill(fill);
|
||||
}
|
||||
|
||||
@ -181,6 +183,7 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl
|
||||
public List<IFluidAcceptor> getFluidList(FluidType type) {
|
||||
if(type == tanks[2].getTankType()) return list1;
|
||||
if(type == tanks[3].getTankType()) return list2;
|
||||
if(type == tanks[4].getTankType()) return list3;
|
||||
return new ArrayList<IFluidAcceptor>();
|
||||
}
|
||||
|
||||
@ -188,6 +191,7 @@ public class TileEntityMachineCatalyticCracker extends TileEntity implements IFl
|
||||
public void clearFluidList(FluidType type) {
|
||||
if(type == tanks[2].getTankType()) list1.clear();
|
||||
if(type == tanks[3].getTankType()) list2.clear();
|
||||
if(type == tanks[4].getTankType()) list3.clear();
|
||||
}
|
||||
|
||||
AxisAlignedBB bb = null;
|
||||
|
||||
@ -213,6 +213,14 @@ public abstract class TileEntityRBMKBase extends TileEntity implements INBTPacke
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
|
||||
if(this.worldObj != null) {
|
||||
this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
|
||||
}
|
||||
}
|
||||
|
||||
protected void coolPassively() {
|
||||
|
||||
if(ModEventHandler.fire > 0) {
|
||||
|
||||
@ -152,7 +152,7 @@ public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT {
|
||||
|
||||
if(this.target != null && this.getPower() >= demand) {
|
||||
|
||||
EntityDamageUtil.attackEntityFromIgnoreIFrame(this.target, ModDamageSource.shrapnel, (this.blackLevel * 10 + this.redLevel + 1F) * 0.25F);
|
||||
EntityDamageUtil.attackEntityFromIgnoreIFrame(this.target, ModDamageSource.microwave, (this.blackLevel * 10 + this.redLevel + 1F) * 0.25F);
|
||||
|
||||
if(pinkLevel > 0)
|
||||
this.target.setFire(this.pinkLevel * 3);
|
||||
|
||||
@ -349,6 +349,7 @@ death.attack.laser.item=%1$s wurde von %2$s mit %3$s zerbröselt.
|
||||
death.attack.lead=%1$s starb an Bleivergiftung.
|
||||
death.attack.lunar=%1$s vergaß lebenswichtige Organe aufzuladen.
|
||||
death.attack.meteorite=%1$s wurde von einem fallenden Stein aus dem Weltall erschlagen.
|
||||
death.attack.microwave=%1$s explodierte wegen Mikrowellenstrahlung.
|
||||
death.attack.mku=%1$s starb aus unbekannten Gründen.
|
||||
death.attack.monoxide=%1$s vergaß, die Batterien im Kohlenmonoxid-Detektor auszutauschen.
|
||||
death.attack.mudPoisoning=%1$s starb an Giftschlamm.
|
||||
|
||||
@ -521,6 +521,7 @@ death.attack.laser.item=%1$s was turned into ash by %2$s using %3$s.
|
||||
death.attack.lead=%1$s died from lead poisoning.
|
||||
death.attack.lunar=%1$s forgot to charge their vital organs.
|
||||
death.attack.meteorite=%1$s was hit by a falling rock from outer space.
|
||||
death.attack.microwave=%1$s was exploded by microwave radiation.
|
||||
death.attack.mku=%1$s died from unknown causes.
|
||||
death.attack.monoxide=%1$s forgot to change the batteries in their carbon monoxide detector.
|
||||
death.attack.mudPoisoning=%1$s died in poisonous mud.
|
||||
|
||||
1533
src/main/resources/assets/hbm/models/weapons/detonator_laser.obj
Normal file
BIN
src/main/resources/assets/hbm/textures/armor/wings_black.png
Normal file
|
After Width: | Height: | Size: 346 B |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 423 B |
BIN
src/main/resources/assets/hbm/textures/items/ammo_nuke_hive.png
Normal file
|
After Width: | Height: | Size: 315 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.4 KiB |