Rift colors
This commit is contained in:
parent
be184579e1
commit
f5cc44e868
11 changed files with 107 additions and 35 deletions
|
@ -32,6 +32,7 @@ public class SavedToNBTProcessor extends AbstractProcessor {
|
||||||
private static final String NBT_STORABLE = "org.dimdev.ddutils.nbt.INBTStorable";
|
private static final String NBT_STORABLE = "org.dimdev.ddutils.nbt.INBTStorable";
|
||||||
private static final String VEC_3I = "net.minecraft.util.math.Vec3i";
|
private static final String VEC_3I = "net.minecraft.util.math.Vec3i";
|
||||||
private static final String LOCATION = "org.dimdev.ddutils.Location";
|
private static final String LOCATION = "org.dimdev.ddutils.Location";
|
||||||
|
private static final String RGBA = "org.dimdev.ddutils.RGBA";
|
||||||
private static final String VIRTUAL_LOCATION = "org.dimdev.dimdoors.shared.VirtualLocation";
|
private static final String VIRTUAL_LOCATION = "org.dimdev.dimdoors.shared.VirtualLocation";
|
||||||
private static final String UUID = "java.util.UUID";
|
private static final String UUID = "java.util.UUID";
|
||||||
|
|
||||||
|
@ -307,6 +308,12 @@ public class SavedToNBTProcessor extends AbstractProcessor {
|
||||||
w.println(nbt + ".setInteger(\"x\", " + from + ".getX());");
|
w.println(nbt + ".setInteger(\"x\", " + from + ".getX());");
|
||||||
w.println(nbt + ".setInteger(\"y\", " + from + ".getY());");
|
w.println(nbt + ".setInteger(\"y\", " + from + ".getY());");
|
||||||
w.println(nbt + ".setInteger(\"z\", " + from + ".getZ());");
|
w.println(nbt + ".setInteger(\"z\", " + from + ".getZ());");
|
||||||
|
} else if (types.isAssignable(type, elements.getTypeElement(RGBA).asType())) {
|
||||||
|
w.println("NBTTagCompound " + nbt + " = new NBTTagCompound();");
|
||||||
|
w.println(nbt + ".setFloat(\"red\", " + from + ".getRed());");
|
||||||
|
w.println(nbt + ".setFloat(\"green\", " + from + ".getGreen());");
|
||||||
|
w.println(nbt + ".setFloat(\"blue\", " + from + ".getBlue());");
|
||||||
|
w.println(nbt + ".setFloat(\"alpha\", " + from + ".getAlpha());");
|
||||||
} else if (types.isAssignable(type, elements.getTypeElement(VIRTUAL_LOCATION).asType())) {
|
} else if (types.isAssignable(type, elements.getTypeElement(VIRTUAL_LOCATION).asType())) {
|
||||||
w.println("NBTTagCompound " + nbt + " = new NBTTagCompound();");
|
w.println("NBTTagCompound " + nbt + " = new NBTTagCompound();");
|
||||||
w.println(nbt + ".setInteger(\"dim\", " + from + ".getDim());");
|
w.println(nbt + ".setInteger(\"dim\", " + from + ".getDim());");
|
||||||
|
@ -566,10 +573,16 @@ public class SavedToNBTProcessor extends AbstractProcessor {
|
||||||
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"z\")" + ");");
|
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"z\")" + ");");
|
||||||
} else if (types.isAssignable(type, elements.getTypeElement(LOCATION).asType())) {
|
} else if (types.isAssignable(type, elements.getTypeElement(LOCATION).asType())) {
|
||||||
w.println(type + " " + to + " = new " + type + "("
|
w.println(type + " " + to + " = new " + type + "("
|
||||||
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"dim\"), "
|
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"dim\"), "
|
||||||
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"x\"), "
|
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"x\"), "
|
||||||
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"y\"), "
|
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"y\"), "
|
||||||
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"z\")" + ");");
|
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"z\")" + ");");
|
||||||
|
} else if (types.isAssignable(type, elements.getTypeElement(RGBA).asType())) {
|
||||||
|
w.println(type + " " + to + " = new " + type + "("
|
||||||
|
+ "((NBTTagCompound) "+ nbt + ").getFloat(\"red\"), "
|
||||||
|
+ "((NBTTagCompound) "+ nbt + ").getFloat(\"green\"), "
|
||||||
|
+ "((NBTTagCompound) "+ nbt + ").getFloat(\"blue\"), "
|
||||||
|
+ "((NBTTagCompound) "+ nbt + ").getFloat(\"alpha\")" + ");");
|
||||||
} else if (types.isAssignable(type, elements.getTypeElement(VIRTUAL_LOCATION).asType())) {
|
} else if (types.isAssignable(type, elements.getTypeElement(VIRTUAL_LOCATION).asType())) {
|
||||||
w.println(type + " " + to + " = new " + type + "("
|
w.println(type + " " + to + " = new " + type + "("
|
||||||
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"dim\"), "
|
+ "((NBTTagCompound) "+ nbt + ").getInteger(\"dim\"), "
|
||||||
|
|
|
@ -18,7 +18,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
|
||||||
|
|
||||||
// Version info
|
// Version info
|
||||||
String baseversion = "3.0.0" // Set beta to 0 after changing this
|
String baseversion = "3.0.0" // Set beta to 0 after changing this
|
||||||
int beta = 2 // Set this to 0 for a non-beta release
|
int beta = 3 // Set this to 0 for a non-beta release
|
||||||
ext.mcversion = "1.12.2"
|
ext.mcversion = "1.12.2"
|
||||||
ext.forgeversion = "14.23.1.2555"
|
ext.forgeversion = "14.23.1.2555"
|
||||||
String mcpversion = "snapshot_20171007"
|
String mcpversion = "snapshot_20171007"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.dimdev.ddutils.render;
|
package org.dimdev.ddutils;
|
||||||
|
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
|
@ -7,7 +7,7 @@ import java.util.Random;
|
||||||
|
|
||||||
import org.dimdev.dimdoors.DimDoors;
|
import org.dimdev.dimdoors.DimDoors;
|
||||||
import org.dimdev.dimdoors.shared.tileentities.TileEntityEntranceRift;
|
import org.dimdev.dimdoors.shared.tileentities.TileEntityEntranceRift;
|
||||||
import org.dimdev.ddutils.render.RGBA;
|
import org.dimdev.ddutils.RGBA;
|
||||||
import net.minecraft.client.renderer.*;
|
import net.minecraft.client.renderer.*;
|
||||||
import net.minecraft.client.renderer.vertex.*;
|
import net.minecraft.client.renderer.vertex.*;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.dimdev.dimdoors.client;
|
||||||
import com.flowpowered.math.TrigMath;
|
import com.flowpowered.math.TrigMath;
|
||||||
import com.flowpowered.math.vector.Vector3f;
|
import com.flowpowered.math.vector.Vector3f;
|
||||||
import com.flowpowered.math.vector.Vector4f;
|
import com.flowpowered.math.vector.Vector4f;
|
||||||
|
import org.dimdev.ddutils.RGBA;
|
||||||
import org.dimdev.dimdoors.DimDoors;
|
import org.dimdev.dimdoors.DimDoors;
|
||||||
import org.dimdev.dimdoors.shared.tileentities.TileEntityFloatingRift;
|
import org.dimdev.dimdoors.shared.tileentities.TileEntityFloatingRift;
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
|
@ -149,10 +150,13 @@ public class TileEntityFloatingRiftRenderer extends TileEntitySpecialRenderer<Ti
|
||||||
@Override
|
@Override
|
||||||
public void render(TileEntityFloatingRift te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) {
|
public void render(TileEntityFloatingRift te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) {
|
||||||
double radian = update(partialTicks) * TrigMath.DEG_TO_RAD;
|
double radian = update(partialTicks) * TrigMath.DEG_TO_RAD;
|
||||||
|
RGBA color = te.getColor();
|
||||||
|
if (color == null) color = new RGBA(1, 0.5f, 1, 1);
|
||||||
|
|
||||||
GlStateManager.enableLighting();
|
GlStateManager.enableLighting();
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
GlStateManager.disableCull();
|
GlStateManager.disableCull();
|
||||||
|
GlStateManager.enableBlend();
|
||||||
|
|
||||||
bindTexture(tesseract_path);
|
bindTexture(tesseract_path);
|
||||||
|
|
||||||
|
@ -164,13 +168,15 @@ public class TileEntityFloatingRiftRenderer extends TileEntitySpecialRenderer<Ti
|
||||||
|
|
||||||
for (int i = 0; i < tesseract.length; i+=4) {
|
for (int i = 0; i < tesseract.length; i+=4) {
|
||||||
worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
|
||||||
project(worldRenderer, rotation(tesseract[i], radian),0,0);
|
GlStateManager.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
|
||||||
project(worldRenderer, rotation(tesseract[i+1], radian),0,1);
|
project(worldRenderer, rotation(tesseract[i], radian),0,0, color);
|
||||||
project(worldRenderer, rotation(tesseract[i+2], radian),1,1);
|
project(worldRenderer, rotation(tesseract[i+1], radian),0,1, color);
|
||||||
project(worldRenderer, rotation(tesseract[i+3], radian),1,0);
|
project(worldRenderer, rotation(tesseract[i+2], radian),1,1, color);
|
||||||
|
project(worldRenderer, rotation(tesseract[i+3], radian),1,0, color);
|
||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GlStateManager.disableBlend();
|
||||||
GlStateManager.enableCull();
|
GlStateManager.enableCull();
|
||||||
GlStateManager.popMatrix();
|
GlStateManager.popMatrix();
|
||||||
GlStateManager.enableLighting();
|
GlStateManager.enableLighting();
|
||||||
|
@ -194,11 +200,11 @@ public class TileEntityFloatingRiftRenderer extends TileEntitySpecialRenderer<Ti
|
||||||
z * TrigMath.sin(angle) + w * TrigMath.cos(angle));
|
z * TrigMath.sin(angle) + w * TrigMath.cos(angle));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void project(BufferBuilder buffer, Vector4f vector, int u, int v) {
|
private void project(BufferBuilder buffer, Vector4f vector, int u, int v, RGBA color) {
|
||||||
double scalar = 1d/(vector.getW()+1d);
|
double scalar = 1d/(vector.getW()+1d);
|
||||||
Vector3f center = Vector3f.from(0.5f);
|
Vector3f center = Vector3f.from(0.5f);
|
||||||
Vector3f vector1 = vector.toVector3().mul(scalar);
|
Vector3f vector1 = vector.toVector3().mul(scalar);
|
||||||
|
|
||||||
buffer.pos(vector1.getX(), vector1.getY(), vector1.getZ()).tex(u,v).color(1f,1f,1f,1f).endVertex();
|
buffer.pos(vector1.getX(), vector1.getY(), vector1.getZ()).tex(u,v).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,12 +128,12 @@ public abstract class BlockDimensionalDoor extends BlockDoor implements IRiftPro
|
||||||
if (!hasTileEntity(state)) return;
|
if (!hasTileEntity(state)) return;
|
||||||
TileEntityEntranceRift rift = getRift(worldIn, pos, state);
|
TileEntityEntranceRift rift = getRift(worldIn, pos, state);
|
||||||
super.breakBlock(worldIn, pos, state);
|
super.breakBlock(worldIn, pos, state);
|
||||||
|
if (worldIn.isRemote) return;
|
||||||
if (rift.isPlaceRiftOnBreak() || rift.isRegistered() && RiftRegistry.getRiftInfo(rift.getLocation()).getSources().size() > 0 && !rift.isAlwaysDelete()) {
|
if (rift.isPlaceRiftOnBreak() || rift.isRegistered() && RiftRegistry.getRiftInfo(rift.getLocation()).getSources().size() > 0 && !rift.isAlwaysDelete()) {
|
||||||
TileEntityRift newRift = new TileEntityFloatingRift();
|
worldIn.setBlockState(pos, ModBlocks.RIFT.getDefaultState());
|
||||||
|
TileEntityFloatingRift newRift = (TileEntityFloatingRift) worldIn.getTileEntity(pos);
|
||||||
newRift.copyFrom(rift);
|
newRift.copyFrom(rift);
|
||||||
newRift.updateAvailableLinks();
|
newRift.updateAvailableLinks();
|
||||||
worldIn.setBlockState(rift.getPos(), ModBlocks.RIFT.getDefaultState());
|
|
||||||
worldIn.setTileEntity(rift.getPos(), newRift);
|
|
||||||
} else {
|
} else {
|
||||||
rift.unregister();
|
rift.unregister();
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,25 +54,25 @@ public class ItemStabilizedRiftSignature extends Item { // TODO: common supercla
|
||||||
}
|
}
|
||||||
pos = pos.offset(side);
|
pos = pos.offset(side);
|
||||||
|
|
||||||
RotatedLocation source = getSource(stack);
|
RotatedLocation target = getTarget(stack);
|
||||||
|
|
||||||
if (source != null) {
|
if (target != null) {
|
||||||
// Place a rift at the destination point
|
// Place a rift at the target point
|
||||||
world.setBlockState(pos, ModBlocks.RIFT.getDefaultState());
|
if (!target.getLocation().getBlockState().getBlock().equals(ModBlocks.RIFT)) {
|
||||||
TileEntityRift rift1 = (TileEntityRift) world.getTileEntity(pos);
|
World targetWorld = target.getLocation().getWorld();
|
||||||
rift1.setSingleDestination(new GlobalDestination(source.getLocation()));
|
targetWorld.setBlockState(target.getLocation().getPos(), ModBlocks.RIFT.getDefaultState());
|
||||||
rift1.setRotation(player.rotationYaw, 0);
|
TileEntityRift rift1 = (TileEntityRift) target.getLocation().getTileEntity();
|
||||||
rift1.register();
|
rift1.setRotation(target.getYaw(), 0);
|
||||||
|
rift1.register();
|
||||||
// Place a rift at the source point
|
|
||||||
if (!source.getLocation().getBlockState().getBlock().equals(ModBlocks.RIFT)) {
|
|
||||||
World sourceWorld = source.getLocation().getWorld();
|
|
||||||
sourceWorld.setBlockState(source.getLocation().getPos(), ModBlocks.RIFT.getDefaultState());
|
|
||||||
TileEntityRift rift2 = (TileEntityRift) source.getLocation().getTileEntity();
|
|
||||||
rift2.setRotation(source.getYaw(), 0);
|
|
||||||
rift2.register();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Place a rift at the target point
|
||||||
|
world.setBlockState(pos, ModBlocks.RIFT.getDefaultState());
|
||||||
|
TileEntityRift rift2 = (TileEntityRift) world.getTileEntity(pos);
|
||||||
|
rift2.setSingleDestination(new GlobalDestination(target.getLocation()));
|
||||||
|
rift2.setRotation(player.rotationYaw, 0);
|
||||||
|
rift2.register();
|
||||||
|
|
||||||
stack.damageItem(1, player);
|
stack.damageItem(1, player);
|
||||||
|
|
||||||
DimDoors.chat(player, "Rift Created");
|
DimDoors.chat(player, "Rift Created");
|
||||||
|
@ -98,7 +98,7 @@ public class ItemStabilizedRiftSignature extends Item { // TODO: common supercla
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RotatedLocation getSource(ItemStack itemStack) {
|
public static RotatedLocation getTarget(ItemStack itemStack) {
|
||||||
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("destination")) {
|
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("destination")) {
|
||||||
RotatedLocation transform = new RotatedLocation();
|
RotatedLocation transform = new RotatedLocation();
|
||||||
transform.readFromNBT(itemStack.getTagCompound().getCompoundTag("destination"));
|
transform.readFromNBT(itemStack.getTagCompound().getCompoundTag("destination"));
|
||||||
|
@ -111,7 +111,7 @@ public class ItemStabilizedRiftSignature extends Item { // TODO: common supercla
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public void addInformation(ItemStack stack, World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
|
public void addInformation(ItemStack stack, World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
|
||||||
RotatedLocation transform = getSource(stack);
|
RotatedLocation transform = getTarget(stack);
|
||||||
if (transform != null) {
|
if (transform != null) {
|
||||||
tooltip.add(I18n.translateToLocalFormatted("info.stabilized_rift_signature.bound", transform.getLocation().getX(), transform.getLocation().getY(), transform.getLocation().getZ(), transform.getLocation().getDim()));
|
tooltip.add(I18n.translateToLocalFormatted("info.stabilized_rift_signature.bound", transform.getLocation().getX(), transform.getLocation().getY(), transform.getLocation().getZ(), transform.getLocation().getDim()));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -173,6 +173,8 @@ import java.util.*;
|
||||||
registryTo.rifts.get(to).sources.add(from);
|
registryTo.rifts.get(to).sources.add(from);
|
||||||
registryTo.markDirty();
|
registryTo.markDirty();
|
||||||
}
|
}
|
||||||
|
if (to.getTileEntity() instanceof TileEntityRift) ((TileEntityRift) to.getTileEntity()).updateColor();
|
||||||
|
if (from.getTileEntity() instanceof TileEntityRift) ((TileEntityRift) from.getTileEntity()).updateColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeLink(Location from, Location to) {
|
public static void removeLink(Location from, Location to) {
|
||||||
|
@ -182,6 +184,8 @@ import java.util.*;
|
||||||
registryTo.rifts.get(to).sources.remove(from);
|
registryTo.rifts.get(to).sources.remove(from);
|
||||||
registryFrom.markDirty();
|
registryFrom.markDirty();
|
||||||
registryTo.markDirty();
|
registryTo.markDirty();
|
||||||
|
if (to.getTileEntity() instanceof TileEntityRift) ((TileEntityRift) to.getTileEntity()).updateColor();
|
||||||
|
if (from.getTileEntity() instanceof TileEntityRift) ((TileEntityRift) from.getTileEntity()).updateColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addAvailableLink(Location rift, AvailableLinkInfo link) { // TODO cache rifts with availableLinks
|
public static void addAvailableLink(Location rift, AvailableLinkInfo link) { // TODO cache rifts with availableLinks
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.dimdev.dimdoors.shared.rifts;
|
||||||
|
|
||||||
import org.dimdev.ddutils.nbt.NBTUtils;
|
import org.dimdev.ddutils.nbt.NBTUtils;
|
||||||
import org.dimdev.ddutils.nbt.SavedToNBT;
|
import org.dimdev.ddutils.nbt.SavedToNBT;
|
||||||
|
import org.dimdev.ddutils.RGBA;
|
||||||
import org.dimdev.dimdoors.DimDoors;
|
import org.dimdev.dimdoors.DimDoors;
|
||||||
import org.dimdev.dimdoors.shared.VirtualLocation;
|
import org.dimdev.dimdoors.shared.VirtualLocation;
|
||||||
import org.dimdev.dimdoors.shared.pockets.Pocket;
|
import org.dimdev.dimdoors.shared.pockets.Pocket;
|
||||||
|
@ -39,6 +40,8 @@ import java.util.*;
|
||||||
@SavedToNBT @Getter protected float pitch;
|
@SavedToNBT @Getter protected float pitch;
|
||||||
@SavedToNBT @Getter protected boolean alwaysDelete; // Delete the rift when an entrances rift is broken even if the state was changed or destinations link there.
|
@SavedToNBT @Getter protected boolean alwaysDelete; // Delete the rift when an entrances rift is broken even if the state was changed or destinations link there.
|
||||||
@SavedToNBT @Getter protected float chaosWeight;
|
@SavedToNBT @Getter protected float chaosWeight;
|
||||||
|
@SavedToNBT @Getter protected boolean forcedColor;
|
||||||
|
@SavedToNBT @Getter protected RGBA color = null; // TODO: update AnnotatedNBT to be able to save these
|
||||||
// TODO: option to convert to door on teleportTo?
|
// TODO: option to convert to door on teleportTo?
|
||||||
|
|
||||||
protected boolean riftStateChanged; // not saved
|
protected boolean riftStateChanged; // not saved
|
||||||
|
@ -157,6 +160,12 @@ import java.util.*;
|
||||||
markDirty();
|
markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setColor(RGBA color) {
|
||||||
|
forcedColor = color != null;
|
||||||
|
this.color = color;
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
public void markStateChanged() {
|
public void markStateChanged() {
|
||||||
riftStateChanged = true;
|
riftStateChanged = true;
|
||||||
markDirty();
|
markDirty();
|
||||||
|
@ -187,6 +196,7 @@ import java.util.*;
|
||||||
for (WeightedRiftDestination weightedDest : destinations) {
|
for (WeightedRiftDestination weightedDest : destinations) {
|
||||||
weightedDest.getDestination().register(this);
|
weightedDest.getDestination().register(this);
|
||||||
}
|
}
|
||||||
|
updateColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregister() {
|
public void unregister() {
|
||||||
|
@ -229,6 +239,7 @@ import java.util.*;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
destinations.removeIf(weightedRiftDestination -> loc.equals(weightedRiftDestination.getDestination().getReferencedRift(getLocation())));
|
destinations.removeIf(weightedRiftDestination -> loc.equals(weightedRiftDestination.getDestination().getReferencedRift(getLocation())));
|
||||||
|
markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Teleport logic
|
// Teleport logic
|
||||||
|
@ -282,6 +293,44 @@ import java.util.*;
|
||||||
TeleportUtils.teleport(entity, new Location(world, pos), newPitch, newYaw);
|
TeleportUtils.teleport(entity, new Location(world, pos), newPitch, newYaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateColor() { // TODO: have the registry call this method too
|
||||||
|
if (!isRegistered()) {
|
||||||
|
color = new RGBA(0, 0, 0, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (destinations.size() == 0) {
|
||||||
|
color = new RGBA(0.7f, 0.7f, 0.7f, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean safe = true;
|
||||||
|
for (WeightedRiftDestination weightedDestination : destinations) {
|
||||||
|
boolean destSafe = false;
|
||||||
|
RiftDestination destination = weightedDestination.getDestination();
|
||||||
|
if (destination instanceof PrivateDestination
|
||||||
|
|| destination instanceof PocketExitDestination
|
||||||
|
|| destination instanceof PrivatePocketExitDestination) destSafe = true;
|
||||||
|
|
||||||
|
if (!destSafe && destination.getReferencedRift(getLocation()) != null) {
|
||||||
|
RiftRegistry.RiftInfo riftInfo = RiftRegistry.getRiftInfo(destination.getReferencedRift(getLocation()));
|
||||||
|
destSafe = riftInfo != null
|
||||||
|
&& riftInfo.destinations.size() == 1
|
||||||
|
&& riftInfo.destinations.iterator().next().equals(getLocation());
|
||||||
|
}
|
||||||
|
safe &= destSafe;
|
||||||
|
}
|
||||||
|
if (safe) {
|
||||||
|
color = new RGBA(0, 1, 0, 1);
|
||||||
|
} else {
|
||||||
|
color = new RGBA(1, 0, 0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markDirty() {
|
||||||
|
if (!forcedColor) updateColor();
|
||||||
|
super.markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
// Info
|
// Info
|
||||||
protected abstract boolean isFloating(); // TODO: make non-abstract?
|
protected abstract boolean isFloating(); // TODO: make non-abstract?
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import org.dimdev.ddutils.nbt.NBTUtils;
|
||||||
import org.dimdev.ddutils.nbt.SavedToNBT;
|
import org.dimdev.ddutils.nbt.SavedToNBT;
|
||||||
import org.dimdev.dimdoors.shared.rifts.TileEntityRift;
|
import org.dimdev.dimdoors.shared.rifts.TileEntityRift;
|
||||||
import org.dimdev.ddutils.Location;
|
import org.dimdev.ddutils.Location;
|
||||||
import org.dimdev.ddutils.render.RGBA;
|
import org.dimdev.ddutils.RGBA;
|
||||||
import org.dimdev.ddutils.TeleportUtils;
|
import org.dimdev.ddutils.TeleportUtils;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 198 B After Width: | Height: | Size: 15 KiB |
Loading…
Reference in a new issue