From 42e62a36987ddc11ee15bdc4322defc75600db8c Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Fri, 30 Jul 2021 08:48:29 -0400 Subject: [PATCH] Real class height placer --- .../placer/HeightmapObjectPlacer.java | 79 +++++++++++++++++++ .../volmit/iris/engine/object/IrisObject.java | 45 +---------- 2 files changed, 81 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java diff --git a/src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java b/src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java new file mode 100644 index 000000000..a8172d17f --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/framework/placer/HeightmapObjectPlacer.java @@ -0,0 +1,79 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.engine.framework.placer; + +import com.volmit.iris.engine.object.IrisObjectPlacement; +import com.volmit.iris.engine.object.common.IObjectPlacer; +import com.volmit.iris.engine.object.tile.TileData; +import com.volmit.iris.util.math.RNG; +import org.bukkit.block.TileState; +import org.bukkit.block.data.BlockData; + +public class HeightmapObjectPlacer implements IObjectPlacer { + private final long s; + private final IrisObjectPlacement config; + private final IObjectPlacer oplacer; + + public HeightmapObjectPlacer(RNG rng, int x, int yv, int z, IrisObjectPlacement config, IObjectPlacer oplacer) + { + s = rng.nextLong() + yv + z - x; + this.config = config; + this.oplacer = oplacer; + } + + public int getHighest(int param1Int1, int param1Int2) { + return (int) Math.round(config.getHeightmap().getNoise(this.s, param1Int1, param1Int2)); + } + + public int getHighest(int param1Int1, int param1Int2, boolean param1Boolean) { + return (int) Math.round(config.getHeightmap().getNoise(this.s, param1Int1, param1Int2)); + } + + public void set(int param1Int1, int param1Int2, int param1Int3, BlockData param1BlockData) { + oplacer.set(param1Int1, param1Int2, param1Int3, param1BlockData); + } + + public BlockData get(int param1Int1, int param1Int2, int param1Int3) { + return oplacer.get(param1Int1, param1Int2, param1Int3); + } + + public boolean isPreventingDecay() { + return oplacer.isPreventingDecay(); + } + + public boolean isSolid(int param1Int1, int param1Int2, int param1Int3) { + return oplacer.isSolid(param1Int1, param1Int2, param1Int3); + } + + public boolean isUnderwater(int param1Int1, int param1Int2) { + return oplacer.isUnderwater(param1Int1, param1Int2); + } + + public int getFluidHeight() { + return oplacer.getFluidHeight(); + } + + public boolean isDebugSmartBore() { + return oplacer.isDebugSmartBore(); + } + + public void setTile(int param1Int1, int param1Int2, int param1Int3, TileData param1TileData) { + oplacer.setTile(param1Int1, param1Int2, param1Int3, param1TileData); + } +} diff --git a/src/main/java/com/volmit/iris/engine/object/IrisObject.java b/src/main/java/com/volmit/iris/engine/object/IrisObject.java index d1b5f7d5d..4438d9872 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisObject.java @@ -22,6 +22,7 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisDataManager; import com.volmit.iris.engine.cache.AtomicCache; import com.volmit.iris.engine.data.B; +import com.volmit.iris.engine.framework.placer.HeightmapObjectPlacer; import com.volmit.iris.engine.interpolation.IrisInterpolation; import com.volmit.iris.engine.object.common.CarveResult; import com.volmit.iris.engine.object.common.IObjectPlacer; @@ -420,49 +421,7 @@ public class IrisObject extends IrisRegistrant { } public int place(int x, int yv, int z, IObjectPlacer oplacer, IrisObjectPlacement config, RNG rng, Consumer listener, CarveResult c, IrisDataManager rdata) { - IObjectPlacer placer = (config.getHeightmap() != null) ? new IObjectPlacer() { - final long s = rng.nextLong() + yv + z - x; - - public int getHighest(int param1Int1, int param1Int2) { - return (int) Math.round(config.getHeightmap().getNoise(this.s, param1Int1, param1Int2)); - } - - public int getHighest(int param1Int1, int param1Int2, boolean param1Boolean) { - return (int) Math.round(config.getHeightmap().getNoise(this.s, param1Int1, param1Int2)); - } - - public void set(int param1Int1, int param1Int2, int param1Int3, BlockData param1BlockData) { - oplacer.set(param1Int1, param1Int2, param1Int3, param1BlockData); - } - - public BlockData get(int param1Int1, int param1Int2, int param1Int3) { - return oplacer.get(param1Int1, param1Int2, param1Int3); - } - - public boolean isPreventingDecay() { - return oplacer.isPreventingDecay(); - } - - public boolean isSolid(int param1Int1, int param1Int2, int param1Int3) { - return oplacer.isSolid(param1Int1, param1Int2, param1Int3); - } - - public boolean isUnderwater(int param1Int1, int param1Int2) { - return oplacer.isUnderwater(param1Int1, param1Int2); - } - - public int getFluidHeight() { - return oplacer.getFluidHeight(); - } - - public boolean isDebugSmartBore() { - return oplacer.isDebugSmartBore(); - } - - public void setTile(int param1Int1, int param1Int2, int param1Int3, TileData param1TileData) { - oplacer.setTile(param1Int1, param1Int2, param1Int3, param1TileData); - } - } : oplacer; + IObjectPlacer placer = (config.getHeightmap() != null) ? new HeightmapObjectPlacer(rng, x, yv, z, config, oplacer) : oplacer; if (config.isSmartBore()) { ensureSmartBored(placer.isDebugSmartBore());