Merge horizontal and vertical entrances

This commit is contained in:
Runemoro 2017-12-20 16:07:05 -05:00
parent 0599a6d340
commit ff6ba0f7ba
45 changed files with 137 additions and 328 deletions

View file

@ -12,9 +12,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.WorldProvider;
import net.minecraftforge.client.IRenderHandler;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.*;

View file

@ -3,9 +3,8 @@ package com.zixiken.dimdoors.client;
import com.zixiken.dimdoors.shared.DDProxyCommon;
import com.zixiken.dimdoors.shared.entities.EntityMonolith;
import com.zixiken.dimdoors.shared.entities.RenderMonolith;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityFloatingRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityHorizontalEntranceRift;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.WorldProvider;
@ -36,8 +35,7 @@ public class DDProxyClient extends DDProxyCommon {
}
public void registerRenderers() {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityVerticalEntranceRift.class, new TileEntityVerticalEntranceRiftRenderer());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHorizontalEntranceRift.class, new TileEntityHorizontalEntranceRiftRenderer());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEntranceRift.class, new TileEntityEntranceRiftRenderer());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFloatingRift.class, new TileEntityFloatingRiftRenderer());
RenderingRegistry.registerEntityRenderingHandler(EntityMonolith.class, manager -> new RenderMonolith(manager, 0.5f));
}

View file

@ -2,7 +2,6 @@ package com.zixiken.dimdoors.client;
import com.zixiken.dimdoors.shared.blocks.ModBlocks;
import com.zixiken.dimdoors.shared.items.ModItems;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDoor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelBakery;

View file

@ -2,7 +2,6 @@ package com.zixiken.dimdoors.client;
import com.zixiken.dimdoors.shared.util.WorldUtils;
import com.zixiken.dimdoors.shared.world.DimDoorDimensions;
import net.minecraft.client.particle.ParticleFirework;
import net.minecraft.client.particle.ParticleSimpleAnimated;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.entity.Entity;

View file

@ -1,19 +1,16 @@
package com.zixiken.dimdoors.client;
import java.nio.FloatBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.blocks.BlockDimDoorBase;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import com.zixiken.dimdoors.shared.util.RGBA;
import net.minecraft.block.BlockDoor;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.vertex.*;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft;
@ -22,36 +19,29 @@ import net.minecraft.util.ResourceLocation;
import static org.lwjgl.opengl.GL11.*;
public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRenderer<TileEntityVerticalEntranceRift> {
public class TileEntityEntranceRiftRenderer extends TileEntitySpecialRenderer<TileEntityEntranceRift> { // TODO: see TileEntityEndGatewayRenderer
private FloatBuffer buffer = GLAllocation.createDirectFloatBuffer(16);
private ResourceLocation warpPath = new ResourceLocation(DimDoors.MODID + ":textures/other/warp.png");
private ResourceLocation keyPath = new ResourceLocation(DimDoors.MODID + ":textures/other/keyhole.png");
private ResourceLocation keyholeLight = new ResourceLocation(DimDoors.MODID + ":textures/other/keyhole_light.png");
Map<TileEntityEntranceRift, RGBA[]> colorMap = new HashMap<>();
/**
* Renders the dimdoor.
*/
public void renderDimDoorTileEntity(TileEntityVerticalEntranceRift tile, double x, double y, double z) {
// TODO: allow any angle, make static and in a separate class
public void renderDimensionalWall(double x, double y, double z, RGBA[] colors, EnumFacing orientation, double extendUp, double extendDown, double extendLeft, double extendRight, double pushIn) {
GL11.glDisable(GL11.GL_LIGHTING);
Random rand = new Random(31100L);
EnumFacing orientation = tile.orientation;
IBlockState state = tile.getWorld().getBlockState(tile.getPos());
if (state.getBlock() instanceof BlockDoor && state.getValue(BlockDoor.HALF) == BlockDoor.EnumDoorHalf.LOWER) y += 1;
// TODO: option for non-doors in the TileEntityEntranceRift
for (int count = 0; count < 16; ++count) {
for (int pass = 0; pass < 16; pass++) {
GlStateManager.pushMatrix();
float var15 = 16 - count;
float var15 = 16 - pass;
float var16 = 0.2625F;
float var17 = 1.0F / (var15 + .80F);
bindTexture(warpPath);
GlStateManager.enableBlend();
if (count == 0) {
if (pass == 0) {
var17 = 0.1F;
var15 = 25.0F;
var16 = 0.125F;
@ -59,9 +49,8 @@ public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRen
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
}
if (count == 1) {
var16 = .5F;
if (pass == 1) {
var16 = 0.5F;
GlStateManager.blendFunc(GL11.GL_ONE, GL11.GL_ONE);
}
@ -74,6 +63,7 @@ public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRen
GlStateManager.texGen(GlStateManager.TexGen.R, GL11.GL_OBJECT_LINEAR);
GlStateManager.texGen(GlStateManager.TexGen.Q, GL11.GL_OBJECT_LINEAR);
switch (orientation) {
case SOUTH:
GlStateManager.texGen(GlStateManager.TexGen.S, GL11.GL_OBJECT_PLANE, getFloatBuffer(0.0F, 1.0F, 0.0F, 0.0F));
@ -99,6 +89,14 @@ public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRen
GlStateManager.texGen(GlStateManager.TexGen.R, GL11.GL_OBJECT_PLANE, getFloatBuffer(0.0F, 0.0F, 0.0F, 1.0F));
GlStateManager.texGen(GlStateManager.TexGen.Q, GL11.GL_OBJECT_PLANE, getFloatBuffer(1.0F, 0.0F, 0.0F, -0.15F));
break;
case DOWN:
GlStateManager.texGen(GlStateManager.TexGen.S, GL11.GL_OBJECT_PLANE, getFloatBuffer(1.0F, 0.0F, 0.0F, 0.0F));
GlStateManager.texGen(GlStateManager.TexGen.T, GL11.GL_OBJECT_PLANE, getFloatBuffer(0.0F, 0.0F, 1.0F, 0.0F));
GlStateManager.texGen(GlStateManager.TexGen.R, GL11.GL_OBJECT_PLANE, getFloatBuffer(0.0F, 0.0F, 0.0F, 1.0F));
GlStateManager.texGen(GlStateManager.TexGen.Q, GL11.GL_EYE_PLANE, getFloatBuffer(0.0F, 1.0F, 0.0F, 0.0F));
break;
case UP:
// TODO: logic for UP
}
GlStateManager.enableTexGenCoord(GlStateManager.TexGen.S);
@ -114,40 +112,44 @@ public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRen
GlStateManager.translate(0.0F, Minecraft.getSystemTime() % 200000L / 200000.0F * var15, 0.0F);
GlStateManager.scale(var16, var16, var16);
GlStateManager.translate(0.5F, 0.5F, 0.5F);
GlStateManager.rotate((count * count * 4321 + count * 9) * 2.0F, 0.0F, 0.0F, 1.0F);
GlStateManager.rotate((pass * pass * 4321 + pass * 9) * 2.0F, 0.0F, 0.0F, 1.0F);
GlStateManager.translate(0.5F, 0.5F, 0.5F);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder worldRenderer = tessellator.getBuffer();
worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION);
RGBA color = tile.getEntranceRenderColor(rand); // TODO: cache this since it's constant
RGBA color = colors[pass];
GlStateManager.color(color.getRed() * var17, color.getGreen() * var17, color.getBlue() * var17, color.getAlpha());
// Offsets in horizontal vertical and depth directions
double ohs = 0.5 - extendLeft;
double ohe = 0.5 + extendRight;
double ovs = 0.5 - extendDown;
double ove = 0.5 + extendUp;
// Render the rectangle based on the orientation
double od = orientation == EnumFacing.NORTH || orientation == EnumFacing.WEST || orientation == EnumFacing.DOWN ? pushIn : 1 - pushIn;
switch (orientation) {
case NORTH:
case SOUTH:
worldRenderer.pos(x, y - 1, z + .99).endVertex();
worldRenderer.pos(x + 1, y - 1, z + .99).endVertex();
worldRenderer.pos(x + 1, y + 1, z + .99).endVertex();
worldRenderer.pos(x, y + 1, z + .99).endVertex();
worldRenderer.pos(x + ohs, y + ovs, z + od).endVertex();
worldRenderer.pos(x + ohe, y + ovs, z + od).endVertex();
worldRenderer.pos(x + ohe, y + ove, z + od).endVertex();
worldRenderer.pos(x + ohs, y + ove, z + od).endVertex();
break;
case WEST:
worldRenderer.pos(x + .01, y - 1, z).endVertex();
worldRenderer.pos(x + .01, y - 1, z + 1.0D).endVertex();
worldRenderer.pos(x + .01, y + 1, z + 1.0D).endVertex();
worldRenderer.pos(x + .01, y + 1, z).endVertex();
break;
case NORTH:
worldRenderer.pos(x, y + 1, z + .01).endVertex();
worldRenderer.pos(x + 1, y + 1, z + .01).endVertex();
worldRenderer.pos(x + 1, y - 1, z + .01).endVertex();
worldRenderer.pos(x, y - 1, z + .01).endVertex();
break;
case EAST:
worldRenderer.pos(x + .99, y + 1, z).endVertex();
worldRenderer.pos(x + .99, y + 1, z + 1.0D).endVertex();
worldRenderer.pos(x + .99, y - 1, z + 1.0D).endVertex();
worldRenderer.pos(x + .99, y - 1, z).endVertex();
worldRenderer.pos(x + od, y + ovs, z + ohs).endVertex();
worldRenderer.pos(x + od, y + ove, z + ohs).endVertex();
worldRenderer.pos(x + od, y + ove, z + ohe).endVertex();
worldRenderer.pos(x + od, y + ovs, z + ohe).endVertex();
break;
case UP:
case DOWN:
worldRenderer.pos(x + ovs, y + od, z + ohs).endVertex();
worldRenderer.pos(x + ohe, y + od, z + ohs).endVertex();
worldRenderer.pos(x + ohe, y + od, z + ohe).endVertex();
worldRenderer.pos(x + ohs, y + od, z + ohe).endVertex();
break;
}
@ -165,6 +167,15 @@ public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRen
GlStateManager.enableLighting();
}
private RGBA[] getColors(TileEntityEntranceRift entrance) {
if (colorMap.containsKey(entrance)) return colorMap.get(entrance);
Random rand = new Random(31100L);
RGBA[] colors = new RGBA[16];
for (int i = 0; i < 16; i++) colors[i] = entrance.getEntranceRenderColor(rand);
colorMap.put(entrance, colors);
return colors;
}
private FloatBuffer getFloatBuffer(float par1, float par2, float par3, float par4) {
buffer.clear();
buffer.put(par1).put(par2).put(par3).put(par4);
@ -172,7 +183,7 @@ public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRen
return buffer;
}
private void renderKeyHole(TileEntityVerticalEntranceRift tile, double x, double y, double z, int i) {
private void renderKeyHole(TileEntityEntranceRift tile, double x, double y, double z, int i) {
EnumFacing rotation = EnumFacing.getHorizontal((tile.orientation.getHorizontalIndex() + 3) % 4);
GlStateManager.pushMatrix();
@ -238,17 +249,14 @@ public class TileEntityVerticalEntranceRiftRenderer extends TileEntitySpecialRen
}
@Override
public void render(TileEntityVerticalEntranceRift te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) {
World world = te.getWorld();
BlockPos pos = te.getPos();
if (te.doorShouldRender) {
renderDimDoorTileEntity(te, x, y, z);
if (te.lockStatus >= 1) {
for (int i = 0; i < 1 + te.lockStatus; i++) {
renderKeyHole(te, x, y, z, i);
}
}
public void render(TileEntityEntranceRift entrance, double x, double y, double z, float partialTicks, int destroyStage, float alpha) {
if (entrance.shouldRender) {
renderDimensionalWall(x, y, z, getColors(entrance), entrance.orientation, entrance.extendUp, entrance.extendDown, entrance.extendLeft, entrance.extendRight, entrance.pushIn);
if (entrance.lockStatus >= 1) {
for (int i = 0; i < 1 + entrance.lockStatus; i++) {
renderKeyHole(entrance, x, y, z, i);
}
}
}
}
}

View file

@ -1,156 +0,0 @@
package com.zixiken.dimdoors.client;
import java.nio.FloatBuffer;
import java.util.Random;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.blocks.BlockDimTrapdoor;
import com.zixiken.dimdoors.shared.tileentities.TileEntityHorizontalEntranceRift;
import net.minecraft.block.BlockTrapDoor;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.GLAllocation;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class TileEntityHorizontalEntranceRiftRenderer extends TileEntitySpecialRenderer<TileEntityHorizontalEntranceRift> {
private FloatBuffer buffer = GLAllocation.createDirectFloatBuffer(16);
private ResourceLocation riftPath = new ResourceLocation(DimDoors.MODID + ":textures/other/rift.png");
private ResourceLocation warpPath = new ResourceLocation(DimDoors.MODID + ":textures/other/warp.png");
/**
* Renders the dimdoor.
*/
public void renderTransTrapdoorTileEntity(TileEntityHorizontalEntranceRift tile, double x, double y, double z, float partialTicks, float alpha) {
GlStateManager.disableLighting();
Random random = new Random(31100L);
IBlockState state = tile.getWorld().getBlockState(tile.getPos());
for (int count = 0; count < 16; ++count) {
GlStateManager.pushMatrix();
float var15 = 16 - count;
float var16 = 0.2625F;
float var17 = 1.0F / (var15 + 1.0F);
if (count == 0) {
bindTexture(riftPath);
var17 = 0.1F;
var15 = 25.0F;
var16 = 0.125F;
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
}
if (count == 1) {
bindTexture(warpPath);
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_ONE, GL11.GL_ONE);
var16 = .5F;
}
GlStateManager.translate(Minecraft.getSystemTime() % 200000L / 200000.0F, 0, 0.0F);
GlStateManager.translate(0, Minecraft.getSystemTime() % 200000L / 200000.0F, 0.0F);
GlStateManager.translate(0, 0, Minecraft.getSystemTime() % 200000L / 200000.0F);
GlStateManager.texGen(GlStateManager.TexGen.S, GL11.GL_OBJECT_LINEAR);
GlStateManager.texGen(GlStateManager.TexGen.T, GL11.GL_OBJECT_LINEAR);
GlStateManager.texGen(GlStateManager.TexGen.R, GL11.GL_OBJECT_LINEAR);
GlStateManager.texGen(GlStateManager.TexGen.Q, GL11.GL_EYE_LINEAR);
GlStateManager.texGen(GlStateManager.TexGen.S, GL11.GL_OBJECT_PLANE, getFloatBuffer(1.0F, 0.0F, 0.0F, 0.0F));
GlStateManager.texGen(GlStateManager.TexGen.T, GL11.GL_OBJECT_PLANE, getFloatBuffer(0.0F, 0.0F, 1.0F, 0.0F));
GlStateManager.texGen(GlStateManager.TexGen.R, GL11.GL_OBJECT_PLANE, getFloatBuffer(0.0F, 0.0F, 0.0F, 1.0F));
GlStateManager.texGen(GlStateManager.TexGen.Q, GL11.GL_EYE_PLANE, getFloatBuffer(0.0F, 1.0F, 0.0F, 0.0F));
GlStateManager.enableTexGenCoord(GlStateManager.TexGen.S);
GlStateManager.enableTexGenCoord(GlStateManager.TexGen.T);
GlStateManager.enableTexGenCoord(GlStateManager.TexGen.R);
GlStateManager.enableTexGenCoord(GlStateManager.TexGen.Q);
GlStateManager.popMatrix();
GlStateManager.matrixMode(GL11.GL_TEXTURE);
GlStateManager.pushMatrix();
GlStateManager.loadIdentity();
GlStateManager.translate(0.0F, Minecraft.getSystemTime() % 200000L / 200000.0F * var15, 0.0F);
GlStateManager.scale(var16, var16, var16);
GlStateManager.translate(0.5F, 0.5F, 0.5F);
GlStateManager.rotate((count * count * 4321 + count * 9) * 2.0F, 0.0F, 0.0F, 1.0F);
GlStateManager.translate(0.5F, 0.5F, 0.5F);
float r = (random.nextFloat() * 0.5F + 0.1F) * var17;
float g = (random.nextFloat() * 0.4F + 0.4F) * var17;
float b = (random.nextFloat() * 0.6F + 0.5F) * var17;
if (count == 0) {
g = 1.0F;
b = 1.0F;
}
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder worldrenderer = tessellator.getBuffer();
worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR);
if (state.getValue(BlockTrapDoor.HALF) == BlockTrapDoor.DoorHalf.BOTTOM) {
if (state.getValue(BlockTrapDoor.OPEN)) {
worldrenderer.pos(x, y + 0.2, z).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x, y + 0.2, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.2, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.2, z).color(r, g, b, 1.0F).endVertex();
} else {
worldrenderer.pos(x, y + 0.15, z).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x, y + 0.15, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.15, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.15, z).color(r, g, b, 1.0F).endVertex();
}
} else {
if (state.getValue(BlockTrapDoor.OPEN)) {
worldrenderer.pos(x, y + 0.95, z).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x, y + 0.95, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.95, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.95, z).color(r, g, b, 1.0F).endVertex();
} else {
worldrenderer.pos(x, y + 0.85, z).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x, y + 0.85, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.85, z + 1).color(r, g, b, 1.0F).endVertex();
worldrenderer.pos(x + 1, y + 0.85, z).color(r, g, b, 1.0F).endVertex();
}
}
tessellator.draw();
GlStateManager.popMatrix();
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
}
GlStateManager.disableBlend();
GlStateManager.disableTexGenCoord(GlStateManager.TexGen.S);
GlStateManager.disableTexGenCoord(GlStateManager.TexGen.T);
GlStateManager.disableTexGenCoord(GlStateManager.TexGen.R);
GlStateManager.disableTexGenCoord(GlStateManager.TexGen.Q);
GlStateManager.disableLighting();
}
private FloatBuffer getFloatBuffer(float par1, float par2, float par3, float par4) {
buffer.clear();
buffer.put(par1).put(par2).put(par3).put(par4);
buffer.flip();
return buffer;
}
@Override
public void render(TileEntityHorizontalEntranceRift te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) {
renderTransTrapdoorTileEntity(te, x, y, z, partialTicks, alpha);
}
}

View file

@ -13,7 +13,6 @@ import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.registries.GameData;
public class CraftingManager {

View file

@ -41,9 +41,8 @@ public abstract class DDProxyCommon implements IDDProxy {
}
public void registerTileEntities() { // TODO: new registry system
GameRegistry.registerTileEntity(TileEntityVerticalEntranceRift.class, "TileEntityVerticalEntranceRift"); // TODO: new forge registry system?
GameRegistry.registerTileEntity(TileEntityEntranceRift.class, "TileEntityEntranceRift");
GameRegistry.registerTileEntity(TileEntityFloatingRift.class, "TileEntityFloatingRift");
GameRegistry.registerTileEntity(TileEntityHorizontalEntranceRift.class, "TileEntityHorizontalEntranceRift");
}
abstract public void setCloudRenderer(WorldProvider provider, IRenderHandler renderer);

View file

@ -10,7 +10,6 @@ import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.EntityEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.living.LivingFallEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

View file

@ -9,7 +9,6 @@ import com.zixiken.dimdoors.shared.pockets.PocketRegistry;
import com.zixiken.dimdoors.shared.rifts.RiftRegistry;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityFloatingRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.rifts.TileEntityRift;
import com.zixiken.dimdoors.shared.util.Location;
import com.zixiken.dimdoors.shared.util.WorldUtils;
@ -112,9 +111,10 @@ public abstract class BlockDimDoorBase extends BlockDoor implements ITileEntityP
}
@Override
public TileEntityVerticalEntranceRift createNewTileEntity(World worldIn, int meta) {
TileEntityVerticalEntranceRift rift = new TileEntityVerticalEntranceRift();
public TileEntityEntranceRift createNewTileEntity(World worldIn, int meta) {
TileEntityEntranceRift rift = new TileEntityEntranceRift();
rift.orientation = getStateFromMeta(meta).getValue(BlockDoor.FACING).getOpposite();
rift.extendUp += 1;
return rift;
}
@ -122,7 +122,7 @@ public abstract class BlockDimDoorBase extends BlockDoor implements ITileEntityP
public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) {
super.onBlockAdded(worldIn, pos, state);
if (hasTileEntity(state) && !DimDoors.disableRiftSetup) { // TODO: better check for disableRiftSetup (support other plugins such as WorldEdit, support doors being placed while schematics are being placed)
TileEntityVerticalEntranceRift rift = createNewTileEntity(worldIn, getMetaFromState(state));
TileEntityEntranceRift rift = createNewTileEntity(worldIn, getMetaFromState(state));
// Set the virtual location based on where the door was placed
VirtualLocation virtualLocation = null;
@ -179,5 +179,5 @@ public abstract class BlockDimDoorBase extends BlockDoor implements ITileEntityP
public abstract Item getItem();
protected abstract void setupRift(TileEntityVerticalEntranceRift rift);
protected abstract void setupRift(TileEntityEntranceRift rift);
}

View file

@ -2,12 +2,10 @@ package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.items.ModItems;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public class BlockDimDoorGold extends BlockDimDoorBase {
@ -26,7 +24,7 @@ public class BlockDimDoorGold extends BlockDimDoorBase {
}
@Override
protected void setupRift(TileEntityVerticalEntranceRift rift) {
protected void setupRift(TileEntityEntranceRift rift) {
// TODO
}
}

View file

@ -3,7 +3,7 @@ package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.items.ModItems;
import com.zixiken.dimdoors.shared.rifts.RiftDestination;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
@ -26,7 +26,7 @@ public class BlockDimDoorIron extends BlockDimDoorBase {
}
@Override
protected void setupRift(TileEntityVerticalEntranceRift rift) {
protected void setupRift(TileEntityEntranceRift rift) {
RiftDestination.NewPublicDestination destination = RiftDestination.NewPublicDestination.builder().build();
rift.setSingleDestination(destination);
}

View file

@ -3,12 +3,10 @@ package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.items.ModItems;
import com.zixiken.dimdoors.shared.rifts.RiftDestination;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public class BlockDimDoorPersonal extends BlockDimDoorBase {
@ -27,7 +25,7 @@ public class BlockDimDoorPersonal extends BlockDimDoorBase {
}
@Override
protected void setupRift(TileEntityVerticalEntranceRift rift) {
protected void setupRift(TileEntityEntranceRift rift) {
RiftDestination.PrivateDestination destination = RiftDestination.PrivateDestination.builder().build();
rift.setSingleDestination(destination);
rift.setChaosWeight(0);

View file

@ -1,7 +1,7 @@
package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
@ -29,7 +29,7 @@ public class BlockDimDoorTransient extends BlockDimDoorBase { // TODO: convert t
}
@Override
protected void setupRift(TileEntityVerticalEntranceRift rift) {
protected void setupRift(TileEntityEntranceRift rift) {
// TODO
}
}

View file

@ -4,15 +4,13 @@ import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.items.ModItems;
import java.util.Random;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import net.minecraft.block.BlockDoor;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public class BlockDimDoorUnstable extends BlockDimDoorBase {
@ -37,7 +35,7 @@ public class BlockDimDoorUnstable extends BlockDimDoorBase {
}
@Override
protected void setupRift(TileEntityVerticalEntranceRift rift) {
protected void setupRift(TileEntityEntranceRift rift) {
// TODO
}
}

View file

@ -2,12 +2,10 @@ package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.items.ModItems;
import com.zixiken.dimdoors.shared.tileentities.TileEntityVerticalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
public class BlockDimDoorWarp extends BlockDimDoorBase {
@ -26,7 +24,7 @@ public class BlockDimDoorWarp extends BlockDimDoorBase {
}
@Override
protected void setupRift(TileEntityVerticalEntranceRift rift) {
protected void setupRift(TileEntityEntranceRift rift) {
// TODO
}
}

View file

@ -1,7 +1,7 @@
package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.tileentities.TileEntityHorizontalEntranceRift;
import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift;
import net.minecraft.block.*;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
@ -50,10 +50,11 @@ public class BlockDimTrapdoor extends BlockTrapDoor implements ITileEntityProvid
@Override
public TileEntity createNewTileEntity(World worldIn, int meta) {
return new TileEntityHorizontalEntranceRift();
TileEntityEntranceRift rift = new TileEntityEntranceRift();
rift.orientation = EnumFacing.UP;
return rift;
}
@Override
public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) {
super.onBlockAdded(worldIn, pos, state);

View file

@ -26,7 +26,6 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@ -134,14 +133,7 @@ public class BlockRift extends Block implements ITileEntityProvider {
//ArrayList<BlockPos> targets = findReachableBlocks(worldIn, pos, 2, false); // TODO
TileEntityFloatingRift rift = (TileEntityFloatingRift) worldIn.getTileEntity(pos);
if (true) {
FMLClientHandler.instance().getClient().effectRenderer.addEffect(new ParticleRiftEffect.Rift( // TODO: this effect was unfinished in the 1.6.4 mod too
worldIn,
pos.getX() + .5, pos.getY() + .5, pos.getZ() + .5,
rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D));
}
if (false) {
if (0 < 0) {
FMLClientHandler.instance().getClient().effectRenderer.addEffect(new ParticleRiftEffect.GogglesRiftEffect( // TODO: this effect was unfinished in the 1.6.4 mod too
worldIn,
pos.getX() + .5, pos.getY() + .5, pos.getZ() + .5,

View file

@ -12,8 +12,6 @@ import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentString;

View file

@ -4,7 +4,6 @@ import com.zixiken.dimdoors.shared.util.INBTStorable;
import com.zixiken.dimdoors.shared.util.Location;
import com.zixiken.dimdoors.shared.util.NBTUtils;
import lombok.*;
import lombok.experimental.Wither;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;

View file

@ -19,14 +19,12 @@ import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.IEntityOwnable;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.projectile.*;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.server.management.PlayerList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ITickable;
import net.minecraft.util.math.BlockPos;

View file

@ -6,8 +6,6 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import net.minecraft.nbt.NBTTagCompound;
import java.util.UUID;
@NoArgsConstructor @AllArgsConstructor
public class
WeightedRiftDestination implements INBTStorable { // TODO: generics

View file

@ -1,17 +1,35 @@
package com.zixiken.dimdoors.shared.tileentities;
import com.zixiken.dimdoors.shared.pockets.PocketRegistry;
import com.zixiken.dimdoors.shared.rifts.TileEntityRift;
import com.zixiken.dimdoors.shared.util.Location;
import com.zixiken.dimdoors.shared.util.RGBA;
import com.zixiken.dimdoors.shared.util.TeleportUtils;
import com.zixiken.dimdoors.shared.util.WorldUtils;
import com.zixiken.dimdoors.shared.world.DimDoorDimensions;
import lombok.Getter;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import java.util.Random;
// TODO: merge horizontal and vertical entrances' render code into one, and support custom sizes
public abstract class TileEntityEntranceRift extends TileEntityRift {
public class TileEntityEntranceRift extends TileEntityRift {
@Getter private boolean placeRiftOnBreak = false;
@Getter private boolean closeAfterPassThrough = false;
@Getter public boolean shouldRender = true;
@Getter public byte lockStatus = 0;
// Set by the block, not saved and not synced to the client
public EnumFacing orientation;
public int tpOffset = 1; // TODO: float?
public double extendUp = 0.5; // Use += to set these. TODO: @SideOnly client?
public double extendDown = 0.5;
public double extendLeft = 0.5;
public double extendRight = 0.5;
public double pushIn = 0.01; // TODO: set to 0, and set on door
@Override
public void copyFrom(TileEntityRift oldRift) {
@ -28,6 +46,15 @@ public abstract class TileEntityEntranceRift extends TileEntityRift {
super.readFromNBT(nbt);
placeRiftOnBreak = nbt.getBoolean("placeRiftOnBreak");
closeAfterPassThrough = nbt.getBoolean("closeAfterPassThrough");
shouldRender = nbt.getBoolean("shouldRender");
lockStatus = nbt.getByte("lockStatus");
orientation = EnumFacing.byName(nbt.getString("orientation")); // TODO: avoid having to save these and generate on load based on blockstate
tpOffset = nbt.getInteger("tpOffset");
extendUp = nbt.getDouble("extendUp");
extendDown = nbt.getDouble("extendDown");
extendLeft = nbt.getDouble("extendLeft");
extendRight = nbt.getDouble("extendRight");
}
@Override
@ -35,6 +62,16 @@ public abstract class TileEntityEntranceRift extends TileEntityRift {
super.writeToNBT(nbt);
nbt.setBoolean("placeRiftOnBreak", placeRiftOnBreak);
nbt.setBoolean("closeAfterPassThrough", closeAfterPassThrough);
nbt.setBoolean("shouldRender", shouldRender);
nbt.setByte("lockStatus", lockStatus);
nbt.setString("orientation", orientation.getName());
nbt.setInteger("tpOffset", tpOffset);
nbt.setDouble("extendUp", extendUp);
nbt.setDouble("extendDown", extendDown);
nbt.setDouble("extendLeft", extendLeft);
nbt.setDouble("extendRight", extendRight);
return nbt;
}
@ -44,6 +81,8 @@ public abstract class TileEntityEntranceRift extends TileEntityRift {
}
public void setPlaceRiftOnBreak(boolean placeRiftOnBreak) { this.placeRiftOnBreak = placeRiftOnBreak; markDirty(); }
public void setShouldRender(boolean shouldRender) { this.shouldRender = shouldRender; markDirty(); }
public void setLockStatus(byte lockStatus) { this.lockStatus = lockStatus; markDirty(); }
@Override
public boolean teleport(Entity entity) {
@ -55,6 +94,16 @@ public abstract class TileEntityEntranceRift extends TileEntityRift {
return status;
}
@Override
public void teleportTo(Entity entity) {
TeleportUtils.teleport(entity, new Location(world, pos.offset(orientation, tpOffset)), orientation.getHorizontalAngle(), 0);
int dim = WorldUtils.getDim(world);
if (entity instanceof EntityPlayer && DimDoorDimensions.isPocketDimension(dim)) { // TODO
PocketRegistry.getForDim(dim).allowPlayerAtLocation((EntityPlayer) entity, pos.getX(), pos.getY(), pos.getZ());
}
}
public RGBA getEntranceRenderColor(Random rand) { // TODO: custom color
float red, green, blue;
switch(world.provider.getDimension()) {

View file

@ -1,5 +0,0 @@
package com.zixiken.dimdoors.shared.tileentities;
public class TileEntityHorizontalEntranceRift extends TileEntityEntranceRift {
}

View file

@ -1,49 +0,0 @@
package com.zixiken.dimdoors.shared.tileentities;
import com.zixiken.dimdoors.shared.pockets.PocketRegistry;
import com.zixiken.dimdoors.shared.util.Location;
import com.zixiken.dimdoors.shared.util.TeleportUtils;
import com.zixiken.dimdoors.shared.util.WorldUtils;
import com.zixiken.dimdoors.shared.world.DimDoorDimensions;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
public class TileEntityVerticalEntranceRift extends TileEntityEntranceRift { // TODO: make builder?
public boolean doorShouldRender = true;
public EnumFacing orientation = EnumFacing.SOUTH;
public byte lockStatus = 0;
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
doorShouldRender = nbt.getBoolean("doorShouldRender");
orientation = EnumFacing.getFront(nbt.getInteger("orientation"));
lockStatus = nbt.getByte("lockStatus");
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setBoolean("doorShouldRender", doorShouldRender);
nbt.setInteger("orientation", orientation.getIndex());
nbt.setByte("lockStatus", lockStatus);
return nbt;
}
@Override
public void teleportTo(Entity entity) {
TeleportUtils.teleport(entity, new Location(world, pos.offset(orientation)), orientation.getHorizontalAngle(), 0);
int dim = WorldUtils.getDim(world);
if (entity instanceof EntityPlayer && DimDoorDimensions.isPocketDimension(dim)) { // TODO
PocketRegistry.getForDim(dim).allowPlayerAtLocation((EntityPlayer) entity, pos.getX(), pos.getY(), pos.getZ());
}
}
}

View file

@ -4,15 +4,12 @@ import com.zixiken.dimdoors.DimDoors;
import com.zixiken.dimdoors.shared.blocks.ModBlocks;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**

View file

@ -2,7 +2,6 @@ package com.zixiken.dimdoors.shared.util;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.play.server.*;
import net.minecraft.potion.PotionEffect;

View file

@ -17,7 +17,6 @@ import net.minecraft.world.DimensionType;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.biome.BiomeProviderSingle;
import net.minecraft.world.gen.IChunkGenerator;
import net.minecraftforge.client.IRenderHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

View file

@ -1,6 +1,5 @@
package com.zixiken.dimdoors.shared.world.pocketdimension;
import com.zixiken.dimdoors.client.CloudRenderBlank;
import com.zixiken.dimdoors.shared.pockets.EnumPocketType;
import com.zixiken.dimdoors.shared.world.ModBiomes;
import net.minecraft.entity.Entity;