Unicopia/src/main/java/com/minelittlepony/unicopia/entity/DynamicLightSource.java

60 lines
1.8 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia.entity;
import org.jetbrains.annotations.Nullable;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
public interface DynamicLightSource {
2022-03-26 20:34:15 +01:00
default int getLightLevel() {
return 0;
}
static final class LightEmitter<T extends Entity & DynamicLightSource> {
@Nullable
private BlockPos lastPos;
private final T entity;
LightEmitter(T entity) {
this.entity = entity;
}
@SuppressWarnings("deprecation")
void tick() {
2023-06-03 13:40:54 +02:00
if (entity.getWorld().isClient) {
if (entity.isRemoved()) {
remove();
return;
}
int light = entity.getLightLevel();
if (light <= 0) {
return;
}
BlockPos currentPos = entity.getBlockPos();
2023-06-03 13:40:54 +02:00
if (!currentPos.equals(lastPos) && entity.getWorld().isChunkLoaded(currentPos)) {
try {
if (lastPos != null) {
2023-06-03 13:40:54 +02:00
entity.getWorld().getLightingProvider().checkBlock(lastPos);
}
2023-06-03 13:40:54 +02:00
// TODO: store this in the ether and inject into Chunk#forEachLightSource
//entity.getWorld().getLightingProvider().addLightSource(currentPos, light);
lastPos = currentPos;
} catch (Exception ignored) { }
}
}
}
void remove() {
2023-06-03 13:40:54 +02:00
if (entity.getWorld().isClient && lastPos != null) {
try {
2023-06-03 13:40:54 +02:00
entity.getWorld().getLightingProvider().checkBlock(lastPos);
} catch (Exception ignored) {}
}
}
}
}