mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-02-22 22:10:47 +00:00
battery fix, mass storage tiers
This commit is contained in:
parent
69cd33a3d2
commit
d011ada90d
@ -23,10 +23,6 @@ public abstract class BlockMulti extends BlockBase implements IBlockMulti {
|
|||||||
public int damageDropped(int meta) {
|
public int damageDropped(int meta) {
|
||||||
return rectify(meta);
|
return rectify(meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int rectify(int meta) {
|
|
||||||
return Math.abs(meta % getSubCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
|
|||||||
@ -3,4 +3,8 @@ package com.hbm.blocks;
|
|||||||
public interface IBlockMulti {
|
public interface IBlockMulti {
|
||||||
|
|
||||||
public int getSubCount();
|
public int getSubCount();
|
||||||
|
|
||||||
|
public default int rectify(int meta) {
|
||||||
|
return Math.abs(meta % getSubCount());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2928,7 +2928,7 @@ public class ModBlocks {
|
|||||||
GameRegistry.registerBlock(crate_desh, crate_desh.getUnlocalizedName());
|
GameRegistry.registerBlock(crate_desh, crate_desh.getUnlocalizedName());
|
||||||
GameRegistry.registerBlock(crate_tungsten, crate_tungsten.getUnlocalizedName());
|
GameRegistry.registerBlock(crate_tungsten, crate_tungsten.getUnlocalizedName());
|
||||||
GameRegistry.registerBlock(safe, safe.getUnlocalizedName());
|
GameRegistry.registerBlock(safe, safe.getUnlocalizedName());
|
||||||
GameRegistry.registerBlock(mass_storage, mass_storage.getUnlocalizedName());
|
GameRegistry.registerBlock(mass_storage, ItemBlockBase.class, mass_storage.getUnlocalizedName());
|
||||||
|
|
||||||
//Junk
|
//Junk
|
||||||
GameRegistry.registerBlock(boxcar, boxcar.getUnlocalizedName());
|
GameRegistry.registerBlock(boxcar, boxcar.getUnlocalizedName());
|
||||||
|
|||||||
@ -1,8 +1,11 @@
|
|||||||
package com.hbm.blocks.machine;
|
package com.hbm.blocks.machine;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import com.hbm.blocks.ModBlocks;
|
import com.hbm.blocks.IBlockMulti;
|
||||||
|
import com.hbm.blocks.ILookOverlay;
|
||||||
import com.hbm.items.ModItems;
|
import com.hbm.items.ModItems;
|
||||||
import com.hbm.items.tool.ItemLock;
|
import com.hbm.items.tool.ItemLock;
|
||||||
import com.hbm.lib.RefStrings;
|
import com.hbm.lib.RefStrings;
|
||||||
@ -17,6 +20,7 @@ import net.minecraft.block.Block;
|
|||||||
import net.minecraft.block.BlockContainer;
|
import net.minecraft.block.BlockContainer;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||||
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.item.EntityItem;
|
import net.minecraft.entity.item.EntityItem;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@ -27,11 +31,12 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.IIcon;
|
import net.minecraft.util.IIcon;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
||||||
|
|
||||||
public class BlockMassStorage extends BlockContainer {
|
public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILookOverlay {
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT) private IIcon[] iconTop;
|
||||||
private IIcon iconTop;
|
@SideOnly(Side.CLIENT) private IIcon[] iconSide;
|
||||||
|
|
||||||
public BlockMassStorage() {
|
public BlockMassStorage() {
|
||||||
super(Material.iron);
|
super(Material.iron);
|
||||||
@ -40,23 +45,35 @@ public class BlockMassStorage extends BlockContainer {
|
|||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public void registerBlockIcons(IIconRegister iconRegister) {
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
||||||
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top");
|
this.iconTop = new IIcon[3];
|
||||||
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side");
|
this.iconSide = new IIcon[3];
|
||||||
|
|
||||||
|
this.iconTop[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_iron");
|
||||||
|
this.iconSide[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_iron");
|
||||||
|
this.iconTop[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_desh");
|
||||||
|
this.iconSide[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_desh");
|
||||||
|
this.iconTop[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top");
|
||||||
|
this.iconSide[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public void getSubBlocks(Item item, CreativeTabs tab, List list) {
|
||||||
|
for(int i = 0; i < getSubCount(); ++i) {
|
||||||
|
list.add(new ItemStack(item, 1, i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public IIcon getIcon(int side, int metadata) {
|
public IIcon getIcon(int side, int metadata) {
|
||||||
|
int meta = this.rectify(metadata);
|
||||||
if(this == ModBlocks.safe)
|
return side == 1 ? this.iconTop[meta] : (side == 0 ? this.iconTop[meta] : this.iconSide[meta]);
|
||||||
return metadata == 0 && side == 3 ? this.iconTop : (side == metadata ? this.iconTop : this.blockIcon);
|
|
||||||
|
|
||||||
return side == 1 ? this.iconTop : (side == 0 ? this.iconTop : this.blockIcon);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createNewTileEntity(World world, int meta) {
|
public TileEntity createNewTileEntity(World world, int meta) {
|
||||||
return new TileEntityMassStorage();
|
return new TileEntityMassStorage(meta == 0 ? 10_000 : meta == 1 ? 100_000 : 1_000_000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -84,7 +101,7 @@ public class BlockMassStorage extends BlockContainer {
|
|||||||
|
|
||||||
if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) {
|
if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) {
|
||||||
|
|
||||||
ItemStack drop = new ItemStack(this);
|
ItemStack drop = new ItemStack(this, 1, world.getBlockMetadata(x, y, z));
|
||||||
ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z);
|
ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z);
|
||||||
|
|
||||||
NBTTagCompound nbt = new NBTTagCompound();
|
NBTTagCompound nbt = new NBTTagCompound();
|
||||||
@ -211,4 +228,38 @@ public class BlockMassStorage extends BlockContainer {
|
|||||||
public Item getItemDropped(int i, Random rand, int j) {
|
public Item getItemDropped(int i, Random rand, int j) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSubCount() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void printHook(Pre event, World world, int x, int y, int z) {
|
||||||
|
|
||||||
|
TileEntity te = world.getTileEntity(x, y, z);
|
||||||
|
|
||||||
|
if(!(te instanceof TileEntityMassStorage))
|
||||||
|
return;
|
||||||
|
|
||||||
|
TileEntityMassStorage storage = (TileEntityMassStorage) te;
|
||||||
|
|
||||||
|
List<String> text = new ArrayList();
|
||||||
|
String title = "Empty";
|
||||||
|
boolean full = storage.type != null;
|
||||||
|
|
||||||
|
if(full) {
|
||||||
|
|
||||||
|
title = storage.type.getDisplayName();
|
||||||
|
text.add(String.format("%,d", storage.getStockpile()) + " / " + String.format("%,d", storage.getCapacity()));
|
||||||
|
|
||||||
|
double percent = (double) storage.getStockpile() / (double) storage.getCapacity();
|
||||||
|
int charge = (int) Math.floor(percent * 10_000D);
|
||||||
|
int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8);
|
||||||
|
|
||||||
|
text.add("&[" + color + "&]" + (charge / 100D) + "%");
|
||||||
|
}
|
||||||
|
|
||||||
|
ILookOverlay.printGeneric(event, title, full ? 0xffff00 : 0x00ffff, full ? 0x404000 : 0x004040, text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,10 +57,6 @@ public class FluidDuctStandard extends FluidDuctBase implements IBlockMulti {
|
|||||||
public int damageDropped(int meta) {
|
public int damageDropped(int meta) {
|
||||||
return rectify(meta);
|
return rectify(meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int rectify(int meta) {
|
|
||||||
return Math.abs(meta % 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getRenderType() {
|
public int getRenderType() {
|
||||||
|
|||||||
@ -34,7 +34,8 @@ public class GUIMassStorage extends GuiInfoContainer {
|
|||||||
super.drawScreen(mouseX, mouseY, f);
|
super.drawScreen(mouseX, mouseY, f);
|
||||||
|
|
||||||
String percent = (((int) (storage.getStockpile() * 1000D / (double) storage.getCapacity())) / 10D) + "%";
|
String percent = (((int) (storage.getStockpile() * 1000D / (double) storage.getCapacity())) / 10D) + "%";
|
||||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 96, guiTop + 16, 18, 90, mouseX, mouseY, new String[] { storage.getStockpile() + " / " + storage.getCapacity(), percent });
|
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 96, guiTop + 16, 18, 90, mouseX, mouseY, new String[]
|
||||||
|
{ String.format("%,d", storage.getStockpile()) + " / " + String.format("%,d", storage.getCapacity()), percent });
|
||||||
|
|
||||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 62, guiTop + 72, 14, 14, mouseX, mouseY, new String[] { "Click: Provide one", "Shift-click: Provide stack" });
|
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 62, guiTop + 72, 14, 14, mouseX, mouseY, new String[] { "Click: Provide one", "Shift-click: Provide stack" });
|
||||||
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 80, guiTop + 72, 14, 14, mouseX, mouseY, new String[] { "Toggle output" });
|
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 80, guiTop + 72, 14, 14, mouseX, mouseY, new String[] { "Toggle output" });
|
||||||
|
|||||||
@ -276,7 +276,9 @@ public class CraftingManager {
|
|||||||
addRecipeAuto(new ItemStack(ModBlocks.crate_desh, 1), new Object[] { " D ", "DSD", " D ", 'D', ModItems.plate_desh, 'S', ModBlocks.crate_steel });
|
addRecipeAuto(new ItemStack(ModBlocks.crate_desh, 1), new Object[] { " D ", "DSD", " D ", 'D', ModItems.plate_desh, 'S', ModBlocks.crate_steel });
|
||||||
addRecipeAuto(new ItemStack(ModBlocks.crate_tungsten, 1), new Object[] { "BPB", "PCP", "BPB", 'B', W.block(), 'P', ModItems.board_copper, 'C', ModBlocks.crate_steel });
|
addRecipeAuto(new ItemStack(ModBlocks.crate_tungsten, 1), new Object[] { "BPB", "PCP", "BPB", 'B', W.block(), 'P', ModItems.board_copper, 'C', ModBlocks.crate_steel });
|
||||||
addRecipeAuto(new ItemStack(ModBlocks.safe, 1), new Object[] { "LAL", "ACA", "LAL", 'L', PB.plate(), 'A', ALLOY.plate(), 'C', ModBlocks.crate_steel });
|
addRecipeAuto(new ItemStack(ModBlocks.safe, 1), new Object[] { "LAL", "ACA", "LAL", 'L', PB.plate(), 'A', ALLOY.plate(), 'C', ModBlocks.crate_steel });
|
||||||
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 0), new Object[] { "ICI", "CLC", "ICI", 'I', TI.ingot(), 'C', ModBlocks.crate_steel, 'L', ModItems.circuit_red_copper });
|
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 0), new Object[] { "ICI", "CLC", "ICI", 'I', TI.ingot(), 'C', ModBlocks.crate_steel, 'L', ModItems.circuit_copper });
|
||||||
|
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 1), new Object[] { "PCP", "PMP", "PPP", 'P', DESH.ingot(), 'C', ModItems.circuit_red_copper, 'M', new ItemStack(ModBlocks.mass_storage, 1, 0) });
|
||||||
|
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 2), new Object[] { "PCP", "PMP", "PPP", 'P', TCALLOY.ingot(), 'C', ModItems.circuit_gold, 'M', new ItemStack(ModBlocks.mass_storage, 1, 1) });
|
||||||
addRecipeAuto(new ItemStack(ModBlocks.machine_autocrafter, 1), new Object[] { "SCS", "MWM", "SCS", 'S', STEEL.plate(), 'C', ModItems.circuit_copper, 'M', ModItems.motor, 'W', Blocks.crafting_table });
|
addRecipeAuto(new ItemStack(ModBlocks.machine_autocrafter, 1), new Object[] { "SCS", "MWM", "SCS", 'S', STEEL.plate(), 'C', ModItems.circuit_copper, 'M', ModItems.motor, 'W', Blocks.crafting_table });
|
||||||
addRecipeAuto(new ItemStack(ModBlocks.machine_waste_drum, 1), new Object[] { "LRL", "BRB", "LRL", 'L', PB.ingot(), 'B', Blocks.iron_bars, 'R', ModItems.rod_quad_empty });
|
addRecipeAuto(new ItemStack(ModBlocks.machine_waste_drum, 1), new Object[] { "LRL", "BRB", "LRL", 'L', PB.ingot(), 'B', Blocks.iron_bars, 'R', ModItems.rod_quad_empty });
|
||||||
addRecipeAuto(new ItemStack(ModBlocks.machine_press, 1), new Object[] { "IRI", "IPI", "IBI", 'I', IRON.ingot(), 'R', Blocks.furnace, 'B', IRON.block(), 'P', Blocks.piston });
|
addRecipeAuto(new ItemStack(ModBlocks.machine_press, 1), new Object[] { "IRI", "IPI", "IBI", 'I', IRON.ingot(), 'R', Blocks.furnace, 'B', IRON.block(), 'P', Blocks.piston });
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import api.hbm.energy.IBatteryItem;
|
|||||||
import api.hbm.energy.IEnergyConductor;
|
import api.hbm.energy.IEnergyConductor;
|
||||||
import api.hbm.energy.IEnergyConnector;
|
import api.hbm.energy.IEnergyConnector;
|
||||||
import api.hbm.energy.IEnergyUser;
|
import api.hbm.energy.IEnergyUser;
|
||||||
import api.hbm.energy.IEnergyConnector.ConnectionPriority;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
@ -264,13 +263,14 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I
|
|||||||
@Override
|
@Override
|
||||||
public long transferPower(long power) {
|
public long transferPower(long power) {
|
||||||
|
|
||||||
int mode =this.getRelevantMode();
|
int mode = this.getRelevantMode();
|
||||||
|
|
||||||
if(mode == mode_output || mode == mode_none) {
|
if(mode == mode_output || mode == mode_none) {
|
||||||
return power;
|
return power;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.power += power;
|
this.power += power;
|
||||||
|
this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
|
||||||
|
|
||||||
if(this.power > this.getMaxPower()) {
|
if(this.power > this.getMaxPower()) {
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I
|
|||||||
@Override
|
@Override
|
||||||
public long getTransferWeight() {
|
public long getTransferWeight() {
|
||||||
|
|
||||||
int mode =this.getRelevantMode();
|
int mode = this.getRelevantMode();
|
||||||
|
|
||||||
if(mode == mode_output || mode == mode_none) {
|
if(mode == mode_output || mode == mode_none) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -4,6 +4,8 @@ import com.hbm.interfaces.IControlReceiver;
|
|||||||
import com.hbm.items.ModItems;
|
import com.hbm.items.ModItems;
|
||||||
import com.hbm.tileentity.INBTPacketReceiver;
|
import com.hbm.tileentity.INBTPacketReceiver;
|
||||||
|
|
||||||
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
@ -13,10 +15,18 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
|
|||||||
|
|
||||||
private int stack = 0;
|
private int stack = 0;
|
||||||
public boolean output = false;
|
public boolean output = false;
|
||||||
|
private int capacity;
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT) public ItemStack type;
|
||||||
|
|
||||||
public TileEntityMassStorage() {
|
public TileEntityMassStorage() {
|
||||||
super(3);
|
super(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TileEntityMassStorage(int capacity) {
|
||||||
|
this();
|
||||||
|
this.capacity = capacity;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getInventoryName() {
|
public String getInventoryName() {
|
||||||
@ -68,6 +78,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
|
|||||||
NBTTagCompound data = new NBTTagCompound();
|
NBTTagCompound data = new NBTTagCompound();
|
||||||
data.setInteger("stack", getStockpile());
|
data.setInteger("stack", getStockpile());
|
||||||
data.setBoolean("output", output);
|
data.setBoolean("output", output);
|
||||||
|
if(slots[1] != null) slots[1].writeToNBT(data);
|
||||||
INBTPacketReceiver.networkPack(this, data, 15);
|
INBTPacketReceiver.networkPack(this, data, 15);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -76,10 +87,11 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
|
|||||||
public void networkUnpack(NBTTagCompound nbt) {
|
public void networkUnpack(NBTTagCompound nbt) {
|
||||||
this.stack = nbt.getInteger("stack");
|
this.stack = nbt.getInteger("stack");
|
||||||
this.output = nbt.getBoolean("output");
|
this.output = nbt.getBoolean("output");
|
||||||
|
this.type = ItemStack.loadItemStackFromNBT(nbt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCapacity() {
|
public int getCapacity() {
|
||||||
return 10_000;
|
return capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getType() {
|
public ItemStack getType() {
|
||||||
@ -114,6 +126,11 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
|
|||||||
super.readFromNBT(nbt);
|
super.readFromNBT(nbt);
|
||||||
this.stack = nbt.getInteger("stack");
|
this.stack = nbt.getInteger("stack");
|
||||||
this.output = nbt.getBoolean("output");
|
this.output = nbt.getBoolean("output");
|
||||||
|
this.capacity = nbt.getInteger("capacity");
|
||||||
|
|
||||||
|
if(this.capacity <= 0) {
|
||||||
|
this.capacity = 10_000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -121,6 +138,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
|
|||||||
super.writeToNBT(nbt);
|
super.writeToNBT(nbt);
|
||||||
nbt.setInteger("stack", stack);
|
nbt.setInteger("stack", stack);
|
||||||
nbt.setBoolean("output", output);
|
nbt.setBoolean("output", output);
|
||||||
|
nbt.setInteger("capacity", capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user