mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
060051623d
@ -0,0 +1,55 @@
|
|||||||
|
package io.github.thebusybiscuit.slimefun4.api.chunks;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
public final class ChunkLocation {
|
||||||
|
|
||||||
|
private final World world;
|
||||||
|
private final int x;
|
||||||
|
private final int z;
|
||||||
|
|
||||||
|
public ChunkLocation(Chunk chunk) {
|
||||||
|
this(chunk.getWorld(), chunk.getX(), chunk.getZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChunkLocation(World world, int x, int z) {
|
||||||
|
this.world = world;
|
||||||
|
this.x = x;
|
||||||
|
this.z = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public World getWorld() {
|
||||||
|
return world;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getX() {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getZ() {
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj instanceof ChunkLocation) {
|
||||||
|
ChunkLocation l = (ChunkLocation) obj;
|
||||||
|
return world.getUID().equals(l.getWorld().getUID()) && l.getX() == x && l.getZ() == z;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(world, x, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return world.getName() + " - Chunk [" + x + " | " + z + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -69,6 +69,7 @@ public final class OreGenSystem {
|
|||||||
if (resource == null) return 0;
|
if (resource == null) return 0;
|
||||||
|
|
||||||
String supply = BlockStorage.getChunkInfo(chunk, "resources_" + resource.getName().toUpperCase());
|
String supply = BlockStorage.getChunkInfo(chunk, "resources_" + resource.getName().toUpperCase());
|
||||||
|
|
||||||
if (supply != null) {
|
if (supply != null) {
|
||||||
return Integer.parseInt(supply);
|
return Integer.parseInt(supply);
|
||||||
}
|
}
|
||||||
|
@ -749,9 +749,6 @@ public final class SlimefunItems {
|
|||||||
public static final ItemStack ENRICHED_NETHER_ICE = new SlimefunItemStack("ENRICHED_NETHER_ICE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2M4MThhYTEzYWFiYzcyOTQ4MzhkMjFjYWFjMDU3ZTk3YmQ4Yzg5NjQxYTBjMGY4YTU1NDQyZmY0ZTI3In19fQ==", "&eEnriched Nether Ice", "", "&2Radiation Level: EXTREMELY HIGH", "&4&oHazmat Suit required");
|
public static final ItemStack ENRICHED_NETHER_ICE = new SlimefunItemStack("ENRICHED_NETHER_ICE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2M4MThhYTEzYWFiYzcyOTQ4MzhkMjFjYWFjMDU3ZTk3YmQ4Yzg5NjQxYTBjMGY4YTU1NDQyZmY0ZTI3In19fQ==", "&eEnriched Nether Ice", "", "&2Radiation Level: EXTREMELY HIGH", "&4&oHazmat Suit required");
|
||||||
public static final ItemStack NETHER_ICE_COOLANT_CELL = new SlimefunItemStack("NETHER_ICE_COOLANT_CELL", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGQzY2Q0MTI1NTVmODk3MDE2MjEzZTVkNmM3NDMxYjQ0OGI5ZTU2NDRlMWIxOWVjNTFiNTMxNmYzNTg0MGUwIn19fQ==", "&6Nether Ice Coolant Cell");
|
public static final ItemStack NETHER_ICE_COOLANT_CELL = new SlimefunItemStack("NETHER_ICE_COOLANT_CELL", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGQzY2Q0MTI1NTVmODk3MDE2MjEzZTVkNmM3NDMxYjQ0OGI5ZTU2NDRlMWIxOWVjNTFiNTMxNmYzNTg0MGUwIn19fQ==", "&6Nether Ice Coolant Cell");
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public static final ItemStack NETHER_DRILL = new CustomItem(Material.RED_TERRACOTTA, "&4Nether Drill", "", "&rAllows you to mine Nether Ice", "", MachineTier.END_GAME.and(MachineType.MACHINE), "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7102 J/s", "", "&c&l! &cCan only be used in the Nether!", "&c&l! &cMake sure to Geo-Scan the Chunk first");
|
|
||||||
|
|
||||||
// Cargo
|
// Cargo
|
||||||
public static final ItemStack CARGO_MANAGER = new SlimefunItemStack("CARGO_MANAGER", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0=", "&6Cargo Manager", "", "&rCore Component of an Item Transport Network");
|
public static final ItemStack CARGO_MANAGER = new SlimefunItemStack("CARGO_MANAGER", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0=", "&6Cargo Manager", "", "&rCore Component of an Item Transport Network");
|
||||||
public static final ItemStack CARGO_NODE = new SlimefunItemStack("CARGO_NODE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMDdiN2VmNmZkNzg2NDg2NWMzMWMxZGM4N2JlZDI0YWI1OTczNTc5ZjVjNjYzOGZlY2I4ZGVkZWI0NDNmZjAifX19", "&7Cargo Node &c(Connector)", "", "&rCargo Connector Pipe");
|
public static final ItemStack CARGO_NODE = new SlimefunItemStack("CARGO_NODE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMDdiN2VmNmZkNzg2NDg2NWMzMWMxZGM4N2JlZDI0YWI1OTczNTc5ZjVjNjYzOGZlY2I4ZGVkZWI0NDNmZjAifX19", "&7Cargo Node &c(Connector)", "", "&rCargo Connector Pipe");
|
||||||
|
@ -69,6 +69,8 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addRecipe(ItemStack[] input, ItemStack output) {
|
public void addRecipe(ItemStack[] input, ItemStack output) {
|
||||||
|
if (output == null) throw new IllegalArgumentException("Recipes must have an Output!");
|
||||||
|
|
||||||
recipes.add(input);
|
recipes.add(input);
|
||||||
recipes.add(new ItemStack[] {output});
|
recipes.add(new ItemStack[] {output});
|
||||||
}
|
}
|
||||||
@ -82,6 +84,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
|
|||||||
public void install() {
|
public void install() {
|
||||||
for (ItemStack recipeItem : shownRecipes) {
|
for (ItemStack recipeItem : shownRecipes) {
|
||||||
SlimefunItem item = SlimefunItem.getByItem(recipeItem);
|
SlimefunItem item = SlimefunItem.getByItem(recipeItem);
|
||||||
|
|
||||||
if (item == null || !SlimefunItem.isDisabled(recipeItem)) {
|
if (item == null || !SlimefunItem.isDisabled(recipeItem)) {
|
||||||
this.recipes.add(new ItemStack[] {recipeItem});
|
this.recipes.add(new ItemStack[] {recipeItem});
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ public abstract class GEOMiner extends AContainer implements InventoryBlock, Rec
|
|||||||
|
|
||||||
processing.put(b, r);
|
processing.put(b, r);
|
||||||
progress.put(b, r.getTicks());
|
progress.put(b, r.getTicks());
|
||||||
OreGenSystem.setSupplies(resource, b.getChunk(), supplies - 1);
|
OreGenSystem.setSupplies(resource, chunk, supplies - 1);
|
||||||
SimpleHologram.update(b, "&7Mining: &r" + resource.getName());
|
SimpleHologram.update(b, "&7Mining: &r" + resource.getName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
|
|
||||||
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.ADrill;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public abstract class NetherDrill extends ADrill {
|
|
||||||
|
|
||||||
public NetherDrill(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
|
|
||||||
super(category, item, name, recipeType, recipe);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OreGenResource getOreGenResource() {
|
|
||||||
return OreGenSystem.getResource("Nether Ice");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack[] getOutputItems() {
|
|
||||||
return new ItemStack[] {SlimefunItems.NETHER_ICE};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getProcessingTime() {
|
|
||||||
return 24;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getInventoryTitle() {
|
|
||||||
return "&4Nether Drill";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getProgressBar() {
|
|
||||||
return new ItemStack(Material.DIAMOND_PICKAXE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMachineIdentifier() {
|
|
||||||
return "NETHER_DRILL";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,5 +1,6 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo;
|
||||||
|
|
||||||
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -97,10 +98,11 @@ public abstract class OilPump extends AContainer {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
OreGenResource oil = OreGenSystem.getResource("Oil");
|
OreGenResource oil = OreGenSystem.getResource("Oil");
|
||||||
int supplies = OreGenSystem.getSupplies(oil, b.getChunk(), false);
|
Chunk chunk = b.getChunk();
|
||||||
|
int supplies = OreGenSystem.getSupplies(oil, chunk, false);
|
||||||
|
|
||||||
if (supplies > 0) {
|
if (supplies > 0) {
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot : getInputSlots()) {
|
||||||
if (SlimefunManager.isItemSimilar(inv.getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) {
|
if (SlimefunManager.isItemSimilar(inv.getItemInSlot(slot), new ItemStack(Material.BUCKET), true)) {
|
||||||
MachineRecipe r = new MachineRecipe(26, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_OIL});
|
MachineRecipe r = new MachineRecipe(26, new ItemStack[0], new ItemStack[] {SlimefunItems.BUCKET_OF_OIL});
|
||||||
|
|
||||||
@ -111,7 +113,7 @@ public abstract class OilPump extends AContainer {
|
|||||||
inv.replaceExistingItem(slot, InvUtils.decreaseItem(inv.getItemInSlot(slot), 1));
|
inv.replaceExistingItem(slot, InvUtils.decreaseItem(inv.getItemInSlot(slot), 1));
|
||||||
processing.put(b, r);
|
processing.put(b, r);
|
||||||
progress.put(b, r.getTicks());
|
progress.put(b, r.getTicks());
|
||||||
OreGenSystem.setSupplies(oil, b.getChunk(), supplies - 1);
|
OreGenSystem.setSupplies(oil, chunk, supplies - 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
@ -58,7 +58,7 @@ public class OreWasher extends MultiBlockMachine {
|
|||||||
for (ItemStack current : inv.getContents()) {
|
for (ItemStack current : inv.getContents()) {
|
||||||
if (current != null) {
|
if (current != null) {
|
||||||
if (SlimefunManager.isItemSimilar(current, SlimefunItems.SIFTED_ORE, true)) {
|
if (SlimefunManager.isItemSimilar(current, SlimefunItems.SIFTED_ORE, true)) {
|
||||||
ItemStack adding = items[new Random().nextInt(items.length)];
|
ItemStack adding = items[ThreadLocalRandom.current().nextInt(items.length)];
|
||||||
Inventory outputInv = null;
|
Inventory outputInv = null;
|
||||||
|
|
||||||
if (!SlimefunPlugin.getSettings().legacyOreWasher) {
|
if (!SlimefunPlugin.getSettings().legacyOreWasher) {
|
||||||
|
@ -231,7 +231,7 @@ public final class ResearchSetup {
|
|||||||
Slimefun.registerResearch(new Research(232, "Advanced Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY_2);
|
Slimefun.registerResearch(new Research(232, "Advanced Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY_2);
|
||||||
Slimefun.registerResearch(new Research(233, "Advanced Androids - Farmer", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER);
|
Slimefun.registerResearch(new Research(233, "Advanced Androids - Farmer", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER);
|
||||||
Slimefun.registerResearch(new Research(234, "Lava Generator", 38), SlimefunItems.LAVA_GENERATOR);
|
Slimefun.registerResearch(new Research(234, "Lava Generator", 38), SlimefunItems.LAVA_GENERATOR);
|
||||||
Slimefun.registerResearch(new Research(235, "Nether Ice Coolant", 45), SlimefunItems.NETHER_ICE, SlimefunItems.ENRICHED_NETHER_ICE, SlimefunItems.NETHER_ICE_COOLANT_CELL, SlimefunItems.NETHER_DRILL);
|
Slimefun.registerResearch(new Research(235, "Nether Ice Coolant", 45), SlimefunItems.NETHER_ICE, SlimefunItems.ENRICHED_NETHER_ICE, SlimefunItems.NETHER_ICE_COOLANT_CELL);
|
||||||
Slimefun.registerResearch(new Research(236, "Nether Star Reactor", 60), SlimefunItems.NETHERSTAR_REACTOR);
|
Slimefun.registerResearch(new Research(236, "Nether Star Reactor", 60), SlimefunItems.NETHERSTAR_REACTOR);
|
||||||
Slimefun.registerResearch(new Research(237, "Blistering Radioactivity", 38), SlimefunItems.BLISTERING_INGOT, SlimefunItems.BLISTERING_INGOT_2, SlimefunItems.BLISTERING_INGOT_3);
|
Slimefun.registerResearch(new Research(237, "Blistering Radioactivity", 38), SlimefunItems.BLISTERING_INGOT, SlimefunItems.BLISTERING_INGOT_2, SlimefunItems.BLISTERING_INGOT_3);
|
||||||
Slimefun.registerResearch(new Research(239, "Automatic Ignition Chamber", 12), SlimefunItems.IGNITION_CHAMBER);
|
Slimefun.registerResearch(new Research(239, "Automatic Ignition Chamber", 12), SlimefunItems.IGNITION_CHAMBER);
|
||||||
|
@ -148,7 +148,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generato
|
|||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.MagnesiumGenerator;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.generators.MagnesiumGenerator;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOMiner;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOMiner;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOScannerBlock;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOScannerBlock;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.NetherDrill;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.OilPump;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.OilPump;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.ElevatorPlate;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.ElevatorPlate;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSTransmitter;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSTransmitter;
|
||||||
@ -822,7 +821,7 @@ public final class SlimefunSetup {
|
|||||||
.register(true);
|
.register(true);
|
||||||
|
|
||||||
new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.SALT, RecipeType.ORE_WASHER,
|
new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.SALT, RecipeType.ORE_WASHER,
|
||||||
new ItemStack[] {null, null, null, null, new ItemStack(Material.SAND, 4), null, null, null, null})
|
new ItemStack[] {new ItemStack(Material.SAND, 4), null, null, null, null, null, null, null, null})
|
||||||
.register(true);
|
.register(true);
|
||||||
|
|
||||||
new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.HEAVY_CREAM, RecipeType.ENHANCED_CRAFTING_TABLE,
|
new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.HEAVY_CREAM, RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||||
@ -2683,21 +2682,6 @@ public final class SlimefunSetup {
|
|||||||
|
|
||||||
}.registerChargeableBlock(true, 512);
|
}.registerChargeableBlock(true, 512);
|
||||||
|
|
||||||
new NetherDrill(Categories.GPS, SlimefunItems.NETHER_DRILL, "NETHER_DRILL", RecipeType.ENHANCED_CRAFTING_TABLE,
|
|
||||||
new ItemStack[] {null, null, null, null, new CustomItem(Material.BARRIER, "&4DEPRECATED", "", "&cThis Item will soon be removed.", "&cUse the GEO Miner instead."), null, null, null, null}){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSpeed() {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getEnergyConsumption() {
|
|
||||||
return 51;
|
|
||||||
}
|
|
||||||
|
|
||||||
}.registerChargeableBlock(true, 1024);
|
|
||||||
|
|
||||||
new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BUCKET_OF_OIL, new RecipeType(SlimefunItems.OIL_PUMP),
|
new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.BUCKET_OF_OIL, new RecipeType(SlimefunItems.OIL_PUMP),
|
||||||
new ItemStack[] {null, null, null, null, new ItemStack(Material.BUCKET), null, null, null, null})
|
new ItemStack[] {null, null, null, null, new ItemStack(Material.BUCKET), null, null, null, null})
|
||||||
.register(true);
|
.register(true);
|
||||||
|
Loading…
Reference in New Issue
Block a user