3
0
Mirror von https://github.com/IntellectualSites/FastAsyncWorldEdit.git synchronisiert 2024-11-09 13:00:05 +01:00

Remove most of PseudoRandom, a few minor cleaning changes, and an upstream change

Dieser Commit ist enthalten in:
matt 2019-03-26 13:41:09 -04:00
Ursprung 0d88a6bce2
Commit 3420b8329b
15 geänderte Dateien mit 128 neuen und 147 gelöschten Zeilen

Datei anzeigen

@ -24,7 +24,6 @@ import com.boydti.fawe.util.TaskManager;
import com.sk89q.util.StringUtil; import com.sk89q.util.StringUtil;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter; import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.BaseEntity;
@ -36,7 +35,7 @@ import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.session.SessionKey; import com.sk89q.worldedit.session.SessionKey;
import com.sk89q.worldedit.util.HandSide; import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.gamemode.GameMode; import com.sk89q.worldedit.world.gamemode.GameMode;
@ -51,11 +50,12 @@ import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
import javax.annotation.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import javax.annotation.Nullable;
public class BukkitPlayer extends AbstractPlayerActor { public class BukkitPlayer extends AbstractPlayerActor {
private Player player; private Player player;
@ -106,16 +106,16 @@ public class BukkitPlayer extends AbstractPlayerActor {
} }
final ItemStack item = player.getItemInHand(); final ItemStack item = player.getItemInHand();
player.setItemInHand(newItem); player.setItemInHand(newItem);
if (item != null) {
HashMap<Integer, ItemStack> overflow = inv.addItem(item); HashMap<Integer, ItemStack> overflow = inv.addItem(item);
if (overflow != null && !overflow.isEmpty()) { if (!overflow.isEmpty()) {
TaskManager.IMP.sync(new RunnableVal<Object>() { TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override @Override
public void run(Object value) { public void run(Object value) {
for (Map.Entry<Integer, ItemStack> entry : overflow.entrySet()) { for (Map.Entry<Integer, ItemStack> entry : overflow.entrySet()) {
ItemStack stack = entry.getValue(); ItemStack stack = entry.getValue();
if (stack.getType() != Material.AIR && stack.getAmount() > 0) { if (stack.getType() != Material.AIR && stack.getAmount() > 0) {
Item dropped = player.getWorld().dropItem(player.getLocation(), stack); Item
dropped = player.getWorld().dropItem(player.getLocation(), stack);
PlayerDropItemEvent event = new PlayerDropItemEvent(player, dropped); PlayerDropItemEvent event = new PlayerDropItemEvent(player, dropped);
if (event.isCancelled()) { if (event.isCancelled()) {
dropped.remove(); dropped.remove();
@ -125,7 +125,6 @@ public class BukkitPlayer extends AbstractPlayerActor {
} }
}); });
} }
}
player.updateInventory(); player.updateInventory();
} }

Datei anzeigen

@ -19,6 +19,7 @@ import com.boydti.fawe.util.SetQueue;
import com.boydti.fawe.util.TaskManager; import com.boydti.fawe.util.TaskManager;
import com.boydti.fawe.util.WEManager; import com.boydti.fawe.util.WEManager;
import com.boydti.fawe.wrappers.WorldWrapper; import com.boydti.fawe.wrappers.WorldWrapper;
import com.google.common.collect.Sets;
import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
@ -192,12 +193,12 @@ public class FaweAPI {
List<? extends World> worlds = platform.getWorlds(); List<? extends World> worlds = platform.getWorlds();
for (World current : worlds) { for (World current : worlds) {
if (Fawe.imp().getWorldName(current).equals(worldName)) { if (Fawe.imp().getWorldName(current).equals(worldName)) {
return WorldWrapper.wrap((AbstractWorld) current); return WorldWrapper.wrap(current);
} }
} }
for (World current : worlds) { for (World current : worlds) {
if (current.getName().equals(worldName)) { if (current.getName().equals(worldName)) {
return WorldWrapper.wrap((AbstractWorld) current); return WorldWrapper.wrap(current);
} }
} }
return null; return null;
@ -247,11 +248,10 @@ public class FaweAPI {
/** /**
* Use ThreadLocalRandom instead * Use ThreadLocalRandom instead
* *
* @return
*/ */
@Deprecated @Deprecated
public static PseudoRandom getFastRandom() { public static PseudoRandom getFastRandom() {
return new PseudoRandom(); throw new UnsupportedOperationException("Please Use ThreadLocalRandom instead.");
} }
/** /**
@ -365,20 +365,17 @@ public class FaweAPI {
} }
} }
World world = origin.getWorld(); World world = origin.getWorld();
Collections.sort(files, new Comparator<File>() { files.sort((a, b) -> {
@Override
public int compare(File a, File b) {
String aName = a.getName(); String aName = a.getName();
String bName = b.getName(); String bName = b.getName();
int aI = Integer.parseInt(aName.substring(0, aName.length() - 3)); int aI = Integer.parseInt(aName.substring(0, aName.length() - 3));
int bI = Integer.parseInt(bName.substring(0, bName.length() - 3)); int bI = Integer.parseInt(bName.substring(0, bName.length() - 3));
long value = aI - bI; long value = aI - bI;
return value == 0 ? 0 : value < 0 ? -1 : 1; return value == 0 ? 0 : value < 0 ? -1 : 1;
}
}); });
RegionWrapper bounds = new RegionWrapper(origin.x - radius, origin.x + radius, origin.z - radius, origin.z + radius); RegionWrapper bounds = new RegionWrapper(origin.x - radius, origin.x + radius, origin.z - radius, origin.z + radius);
RegionWrapper boundsPlus = new RegionWrapper(bounds.minX - 64, bounds.maxX + 512, bounds.minZ - 64, bounds.maxZ + 512); RegionWrapper boundsPlus = new RegionWrapper(bounds.minX - 64, bounds.maxX + 512, bounds.minZ - 64, bounds.maxZ + 512);
HashSet<RegionWrapper> regionSet = new HashSet<>(Arrays.asList(bounds)); HashSet<RegionWrapper> regionSet = Sets.<RegionWrapper>newHashSet(bounds);
ArrayList<DiskStorageHistory> result = new ArrayList<>(); ArrayList<DiskStorageHistory> result = new ArrayList<>();
for (File file : files) { for (File file : files) {
UUID uuid = UUID.fromString(file.getParentFile().getName()); UUID uuid = UUID.fromString(file.getParentFile().getName());

Datei anzeigen

@ -21,6 +21,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
public enum BBC { public enum BBC {
@ -523,7 +524,7 @@ public enum BBC {
} }
public BBC or(BBC... others) { public BBC or(BBC... others) {
int index = PseudoRandom.random.nextInt(others.length + 1); int index = ThreadLocalRandom.current().nextInt(others.length + 1);
return index == 0 ? this : others[index - 1]; return index == 0 ? this : others[index - 1];
} }

Datei anzeigen

@ -46,6 +46,7 @@ import java.io.IOException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.*; import java.util.*;
import java.util.List; import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import javax.annotation.Nullable; import javax.annotation.Nullable;
// TODO FIXME // TODO FIXME
@ -513,7 +514,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int z = 0; z < getLength(); z++) { for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
int newHeight = table.average(x, z, index); int newHeight = table.average(x, z, index);
setLayerHeightRaw(index, newHeight); setLayerHeightRaw(index, newHeight);
} }
@ -576,7 +578,7 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int y = heights.getByte(index) & 0xFF; int y = heights.getByte(index) & 0xFF;
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 0 || PseudoRandom.random.nextInt(256) > height * doubleRarity) { if (height == 0 || ThreadLocalRandom.current().nextInt(256) > height * doubleRarity) {
continue; continue;
} }
mutable.mutX(x); mutable.mutX(x);
@ -624,7 +626,7 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
mutable.mutZ(z); mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int y = heights.getByte(index) & 0xFF; int y = heights.getByte(index) & 0xFF;
if (PseudoRandom.random.nextInt(256) > scaledRarity) { if (ThreadLocalRandom.current().nextInt(256) > scaledRarity) {
continue; continue;
} }
mutable.mutX(x); mutable.mutX(x);
@ -1085,7 +1087,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int z = 0; z < getLength(); z++) { for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
biomeArr[index] = biome; biomeArr[index] = biome;
} }
} }
@ -1136,7 +1139,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
} }
if (imgMask != null) { if (imgMask != null) {
int height = imgMask.getRGB(x, z) & 0xFF; int height = imgMask.getRGB(x, z) & 0xFF;
if (height != 255 && (height <= 0 || !whiteOnly || PseudoRandom.random.nextInt(256) > height)) continue; if (height != 255 && (height <= 0 || !whiteOnly || ThreadLocalRandom
.current().nextInt(256) > height)) continue;
} }
int color = img.getRGB(x, z); int color = img.getRGB(x, z);
if (textureUtil.getIsBlockCloserThanBiome(buffer, color, primtives.biomePriority)) { if (textureUtil.getIsBlockCloserThanBiome(buffer, color, primtives.biomePriority)) {
@ -1220,7 +1224,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int z = 0; z < getLength(); z++) { for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = mask.getRGB(x, z) & 0xFF; int height = mask.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
int color = img.getRGB(x, z); int color = img.getRGB(x, z);
BlockType block = textureUtil.getNearestBlock(color); BlockType block = textureUtil.getNearestBlock(color);
if (block != null) { if (block != null) {
@ -1353,7 +1358,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
mutable.mutZ(z); mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
mutable.mutX(x); mutable.mutX(x);
mutable.mutY(height); mutable.mutY(height);
overlayArr[index] = pattern.apply(mutable.toBlockVector3()).getInternalId(); overlayArr[index] = pattern.apply(mutable.toBlockVector3()).getInternalId();
@ -1380,7 +1386,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
mutable.mutZ(z); mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
mutable.mutX(x); mutable.mutX(x);
mutable.mutY(height); mutable.mutY(height);
mainArr[index] = pattern.apply(mutable.toBlockVector3()).getInternalId(); mainArr[index] = pattern.apply(mutable.toBlockVector3()).getInternalId();
@ -1405,7 +1412,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
mutable.mutZ(z); mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
mutable.mutX(x); mutable.mutX(x);
mutable.mutY(height); mutable.mutY(height);
floorArr[index] = pattern.apply(mutable.toBlockVector3()).getInternalId(); floorArr[index] = pattern.apply(mutable.toBlockVector3()).getInternalId();
@ -1432,7 +1440,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
mutable.mutZ(z); mutable.mutZ(z);
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
mutable.mutX(x); mutable.mutX(x);
mutable.mutY(height); mutable.mutY(height);
int combined = pattern.apply(mutable.toBlockVector3()).getInternalId(); int combined = pattern.apply(mutable.toBlockVector3()).getInternalId();
@ -2078,7 +2087,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int z = 0; z < getLength(); z++) { for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
overlay.get()[index] = combined; overlay.get()[index] = combined;
} }
} }
@ -2096,7 +2106,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int z = 0; z < getLength(); z++) { for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
main.get()[index] = combined; main.get()[index] = combined;
} }
} }
@ -2113,7 +2124,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int z = 0; z < getLength(); z++) { for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
floor.get()[index] = combined; floor.get()[index] = combined;
} }
} }
@ -2131,7 +2143,8 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr
for (int z = 0; z < getLength(); z++) { for (int z = 0; z < getLength(); z++) {
for (int x = 0; x < getWidth(); x++, index++) { for (int x = 0; x < getWidth(); x++, index++) {
int height = img.getRGB(x, z) & 0xFF; int height = img.getRGB(x, z) & 0xFF;
if (height == 255 || height > 0 && !white && PseudoRandom.random.nextInt(256) <= height) { if (height == 255 || height > 0 && !white && ThreadLocalRandom.current()
.nextInt(256) <= height) {
main.get()[index] = combined; main.get()[index] = combined;
floor.get()[index] = combined; floor.get()[index] = combined;
} }

Datei anzeigen

@ -1,16 +1,15 @@
package com.boydti.fawe.jnbt.anvil.generator; package com.boydti.fawe.jnbt.anvil.generator;
import com.boydti.fawe.FaweCache;
import com.boydti.fawe.object.PseudoRandom; import com.boydti.fawe.object.PseudoRandom;
import com.boydti.fawe.util.MathMan; import com.boydti.fawe.util.MathMan;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import java.util.concurrent.ThreadLocalRandom;
public class CavesGen extends GenBase { public class CavesGen extends GenBase {
private boolean evenCaveDistribution = false; private boolean evenCaveDistribution = false;
@ -42,7 +41,8 @@ public class CavesGen extends GenBase {
} }
protected void generateLargeCaveNode(long seed, BlockVector2 pos, Extent chunk, double x, double y, double z) throws WorldEditException { protected void generateLargeCaveNode(long seed, BlockVector2 pos, Extent chunk, double x, double y, double z) throws WorldEditException {
generateCaveNode(seed, pos, chunk, x, y, z, 1.0F + PseudoRandom.random.nextDouble() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); generateCaveNode(seed, pos, chunk, x, y, z, 1.0F + ThreadLocalRandom.current().nextDouble()
* 6.0F, 0.0F, 0.0F, -1, -1, 0.5D);
} }
protected void generateCaveNode(long seed, BlockVector2 chunkPos, Extent chunk, double x, double y, double z, double paramdouble1, double paramdouble2, double paramdouble3, int angle, int maxAngle, double paramDouble4) throws WorldEditException { protected void generateCaveNode(long seed, BlockVector2 chunkPos, Extent chunk, double x, double y, double z, double paramdouble1, double paramdouble2, double paramdouble3, int angle, int maxAngle, double paramDouble4) throws WorldEditException {
@ -54,11 +54,9 @@ public class CavesGen extends GenBase {
double f1 = 0.0F; double f1 = 0.0F;
double f2 = 0.0F; double f2 = 0.0F;
PseudoRandom localRandom = new PseudoRandom(seed);
if (maxAngle <= 0) { if (maxAngle <= 0) {
int checkAreaSize = this.getCheckAreaSize() * 16 - 16; int checkAreaSize = this.getCheckAreaSize() * 16 - 16;
maxAngle = checkAreaSize - localRandom.nextInt(checkAreaSize / 4); maxAngle = checkAreaSize - ThreadLocalRandom.current().nextInt(checkAreaSize / 4);
} }
boolean isLargeCave = false; boolean isLargeCave = false;
@ -67,8 +65,8 @@ public class CavesGen extends GenBase {
isLargeCave = true; isLargeCave = true;
} }
int j = localRandom.nextInt(maxAngle / 2) + maxAngle / 4; int j = ThreadLocalRandom.current().nextInt(maxAngle / 2) + maxAngle / 4;
int k = localRandom.nextInt(6) == 0 ? 1 : 0; int k = ThreadLocalRandom.current().nextInt(6) == 0 ? 1 : 0;
for (; angle < maxAngle; angle++) { for (; angle < maxAngle; angle++) {
double d3 = 1.5D + MathMan.sinInexact(angle * 3.141593F / maxAngle) * paramdouble1 * 1.0F; double d3 = 1.5D + MathMan.sinInexact(angle * 3.141593F / maxAngle) * paramdouble1 * 1.0F;
@ -90,15 +88,19 @@ public class CavesGen extends GenBase {
f2 *= 0.9F; f2 *= 0.9F;
f1 *= 0.75F; f1 *= 0.75F;
f2 += (localRandom.nextDouble() - localRandom.nextDouble()) * localRandom.nextDouble() * 2.0F; f2 += (ThreadLocalRandom.current().nextDouble() - ThreadLocalRandom.current()
f1 += (localRandom.nextDouble() - localRandom.nextDouble()) * localRandom.nextDouble() * 4.0F; .nextDouble()) * ThreadLocalRandom.current().nextDouble() * 2.0F;
f1 += (ThreadLocalRandom.current().nextDouble() - ThreadLocalRandom.current()
.nextDouble()) * ThreadLocalRandom.current().nextDouble() * 4.0F;
if ((!isLargeCave) && (angle == j) && (paramdouble1 > 1.0F) && (maxAngle > 0)) { if ((!isLargeCave) && (angle == j) && (paramdouble1 > 1.0F) && (maxAngle > 0)) {
generateCaveNode(localRandom.nextLong(), chunkPos, chunk, x, y, z, localRandom.nextDouble() * 0.5F + 0.5F, paramdouble2 - 1.570796F, paramdouble3 / 3.0F, angle, maxAngle, 1.0D); generateCaveNode(ThreadLocalRandom.current().nextLong(), chunkPos, chunk, x, y, z, ThreadLocalRandom
generateCaveNode(localRandom.nextLong(), chunkPos, chunk, x, y, z, localRandom.nextDouble() * 0.5F + 0.5F, paramdouble2 + 1.570796F, paramdouble3 / 3.0F, angle, maxAngle, 1.0D); .current().nextDouble() * 0.5F + 0.5F, paramdouble2 - 1.570796F, paramdouble3 / 3.0F, angle, maxAngle, 1.0D);
generateCaveNode(ThreadLocalRandom.current().nextLong(), chunkPos, chunk, x, y, z, ThreadLocalRandom
.current().nextDouble() * 0.5F + 0.5F, paramdouble2 + 1.570796F, paramdouble3 / 3.0F, angle, maxAngle, 1.0D);
return; return;
} }
if ((!isLargeCave) && (localRandom.nextInt(4) == 0)) { if ((!isLargeCave) && (ThreadLocalRandom.current().nextInt(4) == 0)) {
continue; continue;
} }
@ -145,7 +147,7 @@ public class CavesGen extends GenBase {
for (int local_x = m; (!waterFound) && (local_x < n); local_x++) { for (int local_x = m; (!waterFound) && (local_x < n); local_x++) {
for (int local_z = i3; (!waterFound) && (local_z < i4); local_z++) { for (int local_z = i3; (!waterFound) && (local_z < i4); local_z++) {
for (int local_y = i2 + 1; (!waterFound) && (local_y >= i1 - 1); local_y--) { for (int local_y = i2 + 1; (!waterFound) && (local_y >= i1 - 1); local_y--) {
if (local_y >= 0 && local_y < 255) { if (local_y < 255) {
BlockStateHolder material = chunk.getLazyBlock(bx + local_x, local_y, bz + local_z); BlockStateHolder material = chunk.getLazyBlock(bx + local_x, local_y, bz + local_z);
if (material.getBlockType() == BlockTypes.WATER) { if (material.getBlockType() == BlockTypes.WATER) {
waterFound = true; waterFound = true;
@ -220,41 +222,47 @@ public class CavesGen extends GenBase {
@Override @Override
public void generateChunk(int chunkX, int chunkZ, BlockVector2 originChunk, Extent chunk) throws WorldEditException { public void generateChunk(int chunkX, int chunkZ, BlockVector2 originChunk, Extent chunk) throws WorldEditException {
PseudoRandom random = getRandom(); int i = ThreadLocalRandom.current().nextInt(ThreadLocalRandom.current()
int i = random.nextInt(random.nextInt(random.nextInt(this.caveFrequency) + 1) + 1); .nextInt(ThreadLocalRandom.current().nextInt(this.caveFrequency) + 1) + 1);
if (this.evenCaveDistribution) if (this.evenCaveDistribution)
i = this.caveFrequency; i = this.caveFrequency;
if (random.nextInt(100) >= this.caveRarity) if (ThreadLocalRandom.current().nextInt(100) >= this.caveRarity)
i = 0; i = 0;
for (int j = 0; j < i; j++) { for (int j = 0; j < i; j++) {
double x = (chunkX << 4) + random.nextInt(16); double x = (chunkX << 4) + ThreadLocalRandom.current().nextInt(16);
double y; double y;
if (this.evenCaveDistribution) if (this.evenCaveDistribution)
y = random.nextInt(this.caveMinAltitude, this.caveMaxAltitude); y = ThreadLocalRandom.current().nextInt(this.caveMinAltitude, this.caveMaxAltitude);
else else {
y = random.nextInt(random.nextInt(this.caveMaxAltitude - this.caveMinAltitude + 1) + 1) + this.caveMinAltitude; y = ThreadLocalRandom.current()
.nextInt(ThreadLocalRandom.current()
.nextInt(this.caveMaxAltitude - this.caveMinAltitude + 1) + 1) + this.caveMinAltitude;
}
double z = (chunkZ << 4) + random.nextInt(16); double z = (chunkZ << 4) + ThreadLocalRandom.current().nextInt(16);
int count = this.caveSystemFrequency; int count = this.caveSystemFrequency;
boolean largeCaveSpawned = false; boolean largeCaveSpawned = false;
if (random.nextInt(100) <= this.individualCaveRarity) { if (ThreadLocalRandom.current().nextInt(100) <= this.individualCaveRarity) {
generateLargeCaveNode(random.nextLong(), originChunk, chunk, x, y, z); generateLargeCaveNode(ThreadLocalRandom.current().nextLong(), originChunk, chunk, x, y, z);
largeCaveSpawned = true; largeCaveSpawned = true;
} }
if ((largeCaveSpawned) || (random.nextInt(100) <= this.caveSystemPocketChance - 1)) { if ((largeCaveSpawned) || (ThreadLocalRandom.current().nextInt(100)
count += random.nextInt(this.caveSystemPocketMinSize, this.caveSystemPocketMaxSize); <= this.caveSystemPocketChance - 1)) {
count += ThreadLocalRandom.current()
.nextInt(this.caveSystemPocketMinSize, this.caveSystemPocketMaxSize);
} }
while (count > 0) { while (count > 0) {
count--; count--;
double f1 = random.nextDouble() * 3.141593F * 2.0F; double f1 = ThreadLocalRandom.current().nextDouble() * 3.141593F * 2.0F;
double f2 = (random.nextDouble() - 0.5F) * 2.0F / 8.0F; double f2 = (ThreadLocalRandom.current().nextDouble() - 0.5F) * 2.0F / 8.0F;
double f3 = random.nextDouble() * 2.0F + random.nextDouble(); double f3 = ThreadLocalRandom.current().nextDouble() * 2.0F + ThreadLocalRandom
generateCaveNode(random.nextLong(), originChunk, chunk, x, y, z, f3, f1, f2, 0, 0, 1.0D); .current().nextDouble();
generateCaveNode(ThreadLocalRandom.current().nextLong(), originChunk, chunk, x, y, z, f3, f1, f2, 0, 0, 1.0D);
} }
} }
} }

Datei anzeigen

@ -5,6 +5,8 @@ import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import java.util.concurrent.ThreadLocalRandom;
public abstract class GenBase { public abstract class GenBase {
private final int checkAreaSize; private final int checkAreaSize;
@ -15,9 +17,9 @@ public abstract class GenBase {
public GenBase(int area) { public GenBase(int area) {
this.random = new PseudoRandom(); this.random = new PseudoRandom();
this.checkAreaSize = area; this.checkAreaSize = area;
this.seed = PseudoRandom.random.nextLong(); this.seed = ThreadLocalRandom.current().nextLong();
this.worldSeed1 = PseudoRandom.random.nextLong(); this.worldSeed1 = ThreadLocalRandom.current().nextLong();
this.worldSeed2 = PseudoRandom.random.nextLong(); this.worldSeed2 = ThreadLocalRandom.current().nextLong();
} }
public int getCheckAreaSize() { public int getCheckAreaSize() {
@ -34,7 +36,6 @@ public abstract class GenBase {
int chunkZ = chunkPos.getBlockZ(); int chunkZ = chunkPos.getBlockZ();
for (int x = chunkX - i; x <= chunkX + i; x++) { for (int x = chunkX - i; x <= chunkX + i; x++) {
for (int z = chunkZ - i; z <= chunkZ + i; z++) { for (int z = chunkZ - i; z <= chunkZ + i; z++) {
this.random.setSeed(worldSeed1 * x ^ worldSeed2 * z ^ seed);
generateChunk(x, z, chunkPos, chunk); generateChunk(x, z, chunkPos, chunk);
} }
} }

Datei anzeigen

@ -1,5 +1,7 @@
package com.boydti.fawe.object; package com.boydti.fawe.object;
import java.util.concurrent.ThreadLocalRandom;
@Deprecated @Deprecated
/** /**
* @Deprecated use ThreadLocalRandom instead * @Deprecated use ThreadLocalRandom instead
@ -7,50 +9,15 @@ package com.boydti.fawe.object;
public class PseudoRandom { public class PseudoRandom {
public static PseudoRandom random = new PseudoRandom(); public static PseudoRandom random = new PseudoRandom();
private long state;
public PseudoRandom() { public PseudoRandom() {
this.state = System.nanoTime();
}
public PseudoRandom(final long state) {
this.state = state;
}
public void setSeed(long state) {
this.state = state;
}
public long nextLong() {
final long a = this.state;
this.state = this.xorShift64(a);
return a;
}
public long xorShift64(long a) {
a ^= (a << 21);
a ^= (a >>> 35);
a ^= (a << 4);
return a;
}
public double nextDouble() {
return 0x1.0p-63 * (((nextLong()) & 0x7FFFFFFFFFFFFFFFl));
} }
public int random(final int n) { public int random(final int n) {
if (n == 1) { if (n == 1) {
return 0; return 0;
} }
final long r = ((this.nextLong() >>> 32) * n) >> 32; final long r = ((ThreadLocalRandom.current().nextLong() >>> 32) * n) >> 32;
return (int) r; return (int) r;
} }
public int nextInt(int i) {
return random(i);
}
public int nextInt(int start, int end) {
return nextInt(end - start + 1) + start;
}
} }

Datei anzeigen

@ -2,7 +2,6 @@ package com.boydti.fawe.object.brush;
import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.BBC;
import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.PseudoRandom;
import com.boydti.fawe.object.brush.visualization.VisualExtent; import com.boydti.fawe.object.brush.visualization.VisualExtent;
import com.boydti.fawe.object.clipboard.ResizableClipboardBuilder; import com.boydti.fawe.object.clipboard.ResizableClipboardBuilder;
import com.boydti.fawe.object.function.NullRegionFunction; import com.boydti.fawe.object.function.NullRegionFunction;
@ -11,7 +10,6 @@ import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.command.tool.brush.Brush; import com.sk89q.worldedit.command.tool.brush.Brush;
import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard;
@ -26,7 +24,8 @@ import com.sk89q.worldedit.math.transform.AffineTransform;
import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.session.ClipboardHolder;
import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import java.util.concurrent.ThreadLocalRandom;
public class CopyPastaBrush implements Brush, ResettableTool { public class CopyPastaBrush implements Brush, ResettableTool {
@ -94,7 +93,7 @@ public class CopyPastaBrush implements Brush, ResettableTool {
AffineTransform transform = null; AffineTransform transform = null;
if (randomRotate) { if (randomRotate) {
if (transform == null) transform = new AffineTransform(); if (transform == null) transform = new AffineTransform();
int rotate = 90 * PseudoRandom.random.nextInt(4); int rotate = 90 * ThreadLocalRandom.current().nextInt(4);
transform = transform.rotateY(rotate); transform = transform.rotateY(rotate);
} }
if (autoRotate) { if (autoRotate) {

Datei anzeigen

@ -3,7 +3,6 @@ package com.boydti.fawe.object.brush;
import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.BBC;
import com.boydti.fawe.jnbt.anvil.HeightMapMCAGenerator; import com.boydti.fawe.jnbt.anvil.HeightMapMCAGenerator;
import com.boydti.fawe.object.FaweQueue; import com.boydti.fawe.object.FaweQueue;
import com.boydti.fawe.object.PseudoRandom;
import com.boydti.fawe.object.brush.heightmap.HeightMap; import com.boydti.fawe.object.brush.heightmap.HeightMap;
import com.boydti.fawe.object.brush.heightmap.RotatableHeightMap; import com.boydti.fawe.object.brush.heightmap.RotatableHeightMap;
import com.boydti.fawe.object.brush.heightmap.ScalableHeightMap; import com.boydti.fawe.object.brush.heightmap.ScalableHeightMap;
@ -22,6 +21,7 @@ import com.sk89q.worldedit.math.Vector3;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.concurrent.ThreadLocalRandom;
public class HeightBrush implements Brush { public class HeightBrush implements Brush {
@ -60,7 +60,7 @@ public class HeightBrush implements Brush {
heightMap = new RotatableHeightMap(heightMap); heightMap = new RotatableHeightMap(heightMap);
} }
RotatableHeightMap rotatable = (RotatableHeightMap) heightMap; RotatableHeightMap rotatable = (RotatableHeightMap) heightMap;
rotatable.rotate(PseudoRandom.random.nextInt(360)); rotatable.rotate(ThreadLocalRandom.current().nextInt(360));
} }
return heightMap; return heightMap;
} }

Datei anzeigen

@ -1,6 +1,5 @@
package com.boydti.fawe.object.brush; package com.boydti.fawe.object.brush;
import com.boydti.fawe.object.PseudoRandom;
import com.boydti.fawe.object.collection.BlockVectorSet; import com.boydti.fawe.object.collection.BlockVectorSet;
import com.boydti.fawe.object.collection.LocalBlockVectorSet; import com.boydti.fawe.object.collection.LocalBlockVectorSet;
import com.boydti.fawe.object.mask.AdjacentAnyMask; import com.boydti.fawe.object.mask.AdjacentAnyMask;
@ -18,6 +17,7 @@ import com.sk89q.worldedit.function.visitor.RecursiveVisitor;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;
public class ScatterBrush implements Brush { public class ScatterBrush implements Brush {
@ -63,7 +63,7 @@ public class ScatterBrush implements Brush {
LocalBlockVectorSet placed = new LocalBlockVectorSet(); LocalBlockVectorSet placed = new LocalBlockVectorSet();
int maxFails = 1000; int maxFails = 1000;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
int index = PseudoRandom.random.nextInt(length); int index = ThreadLocalRandom.current().nextInt(length);
BlockVector3 pos = visited.get(index); BlockVector3 pos = visited.get(index);
if (pos != null && canApply(editSession, pos)) { if (pos != null && canApply(editSession, pos)) {
int x = pos.getBlockX(); int x = pos.getBlockX();

Datei anzeigen

@ -1,11 +1,11 @@
package com.boydti.fawe.object.clipboard; package com.boydti.fawe.object.clipboard;
import com.boydti.fawe.object.PseudoRandom;
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.session.ClipboardHolder;
import java.net.URI; import java.net.URI;
import java.util.*; import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
@ -144,7 +144,7 @@ public class MultiClipboardHolder extends URIClipboardHolder {
case 1: return available[0]; case 1: return available[0];
} }
int index = PseudoRandom.random.nextInt(available.length); int index = ThreadLocalRandom.current().nextInt(available.length);
return available[index]; return available[index];
} }

Datei anzeigen

@ -63,7 +63,6 @@ public abstract class FaweBlockMatcher {
// return setBlock(blocks.iterator().next()); // return setBlock(blocks.iterator().next());
// } // }
// final BaseBlock[] array = blocks.toArray(new BaseBlock[blocks.size()]); // final BaseBlock[] array = blocks.toArray(new BaseBlock[blocks.size()]);
// final PseudoRandom random = new PseudoRandom(System.nanoTime());
// final int size = array.length; // final int size = array.length;
// return new FaweBlockMatcher() { // return new FaweBlockMatcher() {
// @Override // @Override

Datei anzeigen

@ -1,9 +1,6 @@
package com.boydti.fawe.object.pattern; package com.boydti.fawe.object.pattern;
import com.boydti.fawe.FaweCache;
import com.boydti.fawe.object.PseudoRandom;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.function.pattern.AbstractPattern; import com.sk89q.worldedit.function.pattern.AbstractPattern;
import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.function.visitor.BreadthFirstSearch; import com.sk89q.worldedit.function.visitor.BreadthFirstSearch;
@ -12,6 +9,7 @@ import com.sk89q.worldedit.math.MutableBlockVector;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockStateHolder;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.ThreadLocalRandom;
public class SurfaceRandomOffsetPattern extends AbstractPattern { public class SurfaceRandomOffsetPattern extends AbstractPattern {
private final Pattern pattern; private final Pattern pattern;
@ -57,7 +55,7 @@ public class SurfaceRandomOffsetPattern extends AbstractPattern {
if (index == 0) { if (index == 0) {
return cur.toBlockVector3(); return cur.toBlockVector3();
} }
next = allowed[PseudoRandom.random.nextInt(index)]; next = allowed[ThreadLocalRandom.current().nextInt(index)];
cur.setComponents(next.getBlockX(), next.getBlockY(), next.getBlockZ()); cur.setComponents(next.getBlockX(), next.getBlockY(), next.getBlockZ());
} }
return cur.toBlockVector3(); return cur.toBlockVector3();

Datei anzeigen

@ -1,8 +1,6 @@
package com.boydti.fawe.regions.general.plot; package com.boydti.fawe.regions.general.plot;
import com.boydti.fawe.FaweAPI;
import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.PseudoRandom;
import com.boydti.fawe.util.EditSessionBuilder; import com.boydti.fawe.util.EditSessionBuilder;
import com.boydti.fawe.util.TaskManager; import com.boydti.fawe.util.TaskManager;
import com.github.intellectualsites.plotsquared.commands.Command; import com.github.intellectualsites.plotsquared.commands.Command;
@ -30,6 +28,7 @@ import com.sk89q.worldedit.world.biome.Biomes;
import com.sk89q.worldedit.world.registry.BiomeRegistry; import com.sk89q.worldedit.world.registry.BiomeRegistry;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
@CommandDeclaration( @CommandDeclaration(
command = "generatebiome", command = "generatebiome",
@ -82,7 +81,7 @@ public class PlotSetBiome extends Command {
.player(FawePlayer.wrap(player.getName())) .player(FawePlayer.wrap(player.getName()))
.limitUnlimited() .limitUnlimited()
.build(); .build();
long seed = PseudoRandom.random.nextLong(); long seed = ThreadLocalRandom.current().nextLong();
for (RegionWrapper region : regions) { for (RegionWrapper region : regions) {
CuboidRegion cuboid = new CuboidRegion(BlockVector3.at(region.minX, 0, region.minZ), BlockVector3.at(region.maxX, 256, region.maxZ)); CuboidRegion cuboid = new CuboidRegion(BlockVector3.at(region.minX, 0, region.minZ), BlockVector3.at(region.maxX, 256, region.maxZ));
session.regenerate(cuboid, biome, seed); session.regenerate(cuboid, biome, seed);

Datei anzeigen

@ -1,11 +1,10 @@
package com.boydti.fawe.util; package com.boydti.fawe.util;
import com.boydti.fawe.object.PseudoRandom;
import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.concurrent.ThreadLocalRandom;
public class RandomTextureUtil extends CachedTextureUtil { public class RandomTextureUtil extends CachedTextureUtil {
@ -33,9 +32,10 @@ public class RandomTextureUtil extends CachedTextureUtil {
private int random(int i) { private int random(int i) {
if (i < 0) { if (i < 0) {
return -PseudoRandom.random.nextInt((-i)); int i1 = (-i);
return -ThreadLocalRandom.current().nextInt(i1);
} else { } else {
return PseudoRandom.random.nextInt(i); return ThreadLocalRandom.current().nextInt(i);
} }
} }