mirror of
https://github.com/Ellpeck/NaturesAura.git
synced 2024-11-29 22:28:34 +01:00
misc fixes including making aura effects work!
This commit is contained in:
parent
8fb7beb49f
commit
81c6034c21
4 changed files with 16 additions and 16 deletions
|
@ -29,8 +29,6 @@ import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.IWorld;
|
import net.minecraft.world.IWorld;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.chunk.Chunk;
|
import net.minecraft.world.chunk.Chunk;
|
||||||
import net.minecraft.world.chunk.ChunkStatus;
|
|
||||||
import net.minecraft.world.chunk.IChunk;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
@ -58,7 +56,7 @@ public final class Helper {
|
||||||
public static boolean getTileEntitiesInArea(IWorld world, BlockPos pos, int radius, Function<TileEntity, Boolean> consumer) {
|
public static boolean getTileEntitiesInArea(IWorld world, BlockPos pos, int radius, Function<TileEntity, Boolean> consumer) {
|
||||||
for (int x = (pos.getX() - radius) >> 4; x <= (pos.getX() + radius) >> 4; x++) {
|
for (int x = (pos.getX() - radius) >> 4; x <= (pos.getX() + radius) >> 4; x++) {
|
||||||
for (int z = (pos.getZ() - radius) >> 4; z <= (pos.getZ() + radius) >> 4; z++) {
|
for (int z = (pos.getZ() - radius) >> 4; z <= (pos.getZ() + radius) >> 4; z++) {
|
||||||
Chunk chunk = getOptionalChunk(world, x, z);
|
Chunk chunk = getLoadedChunk(world, x, z);
|
||||||
if (chunk != null) {
|
if (chunk != null) {
|
||||||
for (BlockPos tilePos : chunk.getTileEntitiesPos()) {
|
for (BlockPos tilePos : chunk.getTileEntitiesPos()) {
|
||||||
if (tilePos.distanceSq(pos) <= radius * radius)
|
if (tilePos.distanceSq(pos) <= radius * radius)
|
||||||
|
@ -74,7 +72,7 @@ public final class Helper {
|
||||||
public static void getAuraChunksInArea(World world, BlockPos pos, int radius, Consumer<AuraChunk> consumer) {
|
public static void getAuraChunksInArea(World world, BlockPos pos, int radius, Consumer<AuraChunk> consumer) {
|
||||||
for (int x = (pos.getX() - radius) >> 4; x <= (pos.getX() + radius) >> 4; x++) {
|
for (int x = (pos.getX() - radius) >> 4; x <= (pos.getX() + radius) >> 4; x++) {
|
||||||
for (int z = (pos.getZ() - radius) >> 4; z <= (pos.getZ() + radius) >> 4; z++) {
|
for (int z = (pos.getZ() - radius) >> 4; z <= (pos.getZ() + radius) >> 4; z++) {
|
||||||
Chunk chunk = getOptionalChunk(world, x, z);
|
Chunk chunk = getLoadedChunk(world, x, z);
|
||||||
if (chunk != null) {
|
if (chunk != null) {
|
||||||
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null);
|
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null);
|
||||||
if (auraChunk != null)
|
if (auraChunk != null)
|
||||||
|
@ -95,9 +93,8 @@ public final class Helper {
|
||||||
return frames;
|
return frames;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Chunk getOptionalChunk(IWorld world, int x, int z) {
|
public static Chunk getLoadedChunk(IWorld world, int x, int z) {
|
||||||
IChunk chunk = world.getChunk(x, z, ChunkStatus.EMPTY, false);
|
return world.getChunkProvider().getChunk(x, z, false);
|
||||||
return chunk instanceof Chunk ? (Chunk) chunk : null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int blendColors(int c1, int c2, float ratio) {
|
public static int blendColors(int c1, int c2, float ratio) {
|
||||||
|
|
|
@ -319,32 +319,32 @@ public final class NaturesAuraAPI {
|
||||||
boolean isEffectPowderActive(World world, BlockPos pos, ResourceLocation name);
|
boolean isEffectPowderActive(World world, BlockPos pos, ResourceLocation name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see IAuraChunk#getSpotsInArea(World, BlockPos, int, BiConsumer)
|
* @see IAuraChunk#getSpotsInArea(IWorld, BlockPos, int, BiConsumer)
|
||||||
*/
|
*/
|
||||||
void getAuraSpotsInArea(World world, BlockPos pos, int radius, BiConsumer<BlockPos, Integer> consumer);
|
void getAuraSpotsInArea(World world, BlockPos pos, int radius, BiConsumer<BlockPos, Integer> consumer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see IAuraChunk#getSpotAmountInArea(World, BlockPos, int)
|
* @see IAuraChunk#getSpotAmountInArea(IWorld, BlockPos, int)
|
||||||
*/
|
*/
|
||||||
int getSpotAmountInArea(World world, BlockPos pos, int radius);
|
int getSpotAmountInArea(World world, BlockPos pos, int radius);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see IAuraChunk#getAuraInArea(World, BlockPos, int)
|
* @see IAuraChunk#getAuraInArea(IWorld, BlockPos, int)
|
||||||
*/
|
*/
|
||||||
int getAuraInArea(World world, BlockPos pos, int radius);
|
int getAuraInArea(World world, BlockPos pos, int radius);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see IAuraChunk#triangulateAuraInArea(World, BlockPos, int)
|
* @see IAuraChunk#triangulateAuraInArea(IWorld, BlockPos, int)
|
||||||
*/
|
*/
|
||||||
int triangulateAuraInArea(World world, BlockPos pos, int radius);
|
int triangulateAuraInArea(World world, BlockPos pos, int radius);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see IAuraChunk#getLowestSpot(World, BlockPos, int, BlockPos)
|
* @see IAuraChunk#getLowestSpot(IWorld, BlockPos, int, BlockPos)
|
||||||
*/
|
*/
|
||||||
BlockPos getLowestAuraDrainSpot(World world, BlockPos pos, int radius, BlockPos defaultSpot);
|
BlockPos getLowestAuraDrainSpot(World world, BlockPos pos, int radius, BlockPos defaultSpot);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see IAuraChunk#getHighestSpot(World, BlockPos, int, BlockPos)
|
* @see IAuraChunk#getHighestSpot(IWorld, BlockPos, int, BlockPos)
|
||||||
*/
|
*/
|
||||||
BlockPos getHighestAuraDrainSpot(World world, BlockPos pos, int radius, BlockPos defaultSpot);
|
BlockPos getHighestAuraDrainSpot(World world, BlockPos pos, int radius, BlockPos defaultSpot);
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,8 @@ public class AuraChunk implements IAuraChunk {
|
||||||
public void update() {
|
public void update() {
|
||||||
World world = this.chunk.getWorld();
|
World world = this.chunk.getWorld();
|
||||||
|
|
||||||
|
if (this.drainSpots.size() > 0)
|
||||||
|
System.out.println("Updating with " + this.drainSpots.size());
|
||||||
for (Map.Entry<BlockPos, MutableInt> entry : this.drainSpots.entrySet()) {
|
for (Map.Entry<BlockPos, MutableInt> entry : this.drainSpots.entrySet()) {
|
||||||
BlockPos pos = entry.getKey();
|
BlockPos pos = entry.getKey();
|
||||||
MutableInt amount = entry.getValue();
|
MutableInt amount = entry.getValue();
|
||||||
|
|
|
@ -22,6 +22,7 @@ import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class CommonEvents {
|
public class CommonEvents {
|
||||||
|
|
||||||
|
@ -47,10 +48,10 @@ public class CommonEvents {
|
||||||
ChunkManager manager = ((ServerChunkProvider) event.world.getChunkProvider()).chunkManager;
|
ChunkManager manager = ((ServerChunkProvider) event.world.getChunkProvider()).chunkManager;
|
||||||
Iterable<ChunkHolder> chunks = (Iterable<ChunkHolder>) GET_LOADED_CHUNKS_METHOD.invoke(manager);
|
Iterable<ChunkHolder> chunks = (Iterable<ChunkHolder>) GET_LOADED_CHUNKS_METHOD.invoke(manager);
|
||||||
for (ChunkHolder holder : chunks) {
|
for (ChunkHolder holder : chunks) {
|
||||||
Chunk chunk = holder.func_219298_c();
|
Optional<Chunk> chunkQuestionmark = holder.func_219296_a().getNow(ChunkHolder.UNLOADED_CHUNK).left();
|
||||||
if (chunk == null)
|
if (!chunkQuestionmark.isPresent())
|
||||||
continue;
|
continue;
|
||||||
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null);
|
AuraChunk auraChunk = (AuraChunk) chunkQuestionmark.get().getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null);
|
||||||
if (auraChunk != null)
|
if (auraChunk != null)
|
||||||
auraChunk.update();
|
auraChunk.update();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue