Skip to content

Commit 0599a6d

Browse files
committed
Rendering fixes
Redid the *RiftFX classes based on the old 1.6.4 code, but overriding ParticleSimpleAnimated.
1 parent 3d50cd8 commit 0599a6d

File tree

9 files changed

+130
-140
lines changed

9 files changed

+130
-140
lines changed

.travis.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
language: java
22
notifications:
33
email: false
4+
if: tag IS blank
5+
46
before_install: chmod +x gradlew
57
install: "./gradlew setupCIWorkspace"
68
script: "./gradlew build"
@@ -13,6 +15,7 @@ cache:
1315
- "$HOME/.gradle/caches/"
1416
- "$HOME/.gradle/wrapper/"
1517
sudo: false
18+
1619
deploy:
1720
skip_cleanup: true
1821
provider: releases

src/main/java/com/zixiken/dimdoors/client/ClosingRiftFX.java

Lines changed: 0 additions & 88 deletions
This file was deleted.

src/main/java/com/zixiken/dimdoors/client/CloudRenderBlank.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@
66
import net.minecraftforge.fml.relauncher.Side;
77
import net.minecraftforge.fml.relauncher.SideOnly;
88

9-
public class CloudRenderBlank extends IRenderHandler
10-
{
9+
public class CloudRenderBlank extends IRenderHandler {
1110
@Override
1211
@SideOnly(Side.CLIENT)
13-
public void render(float partialTicks, WorldClient world, Minecraft mc) {
14-
15-
}
12+
public void render(float partialTicks, WorldClient world, Minecraft mc) {}
1613
}

src/main/java/com/zixiken/dimdoors/client/DDProxyClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
import net.minecraftforge.fml.relauncher.Side;
1919
import net.minecraftforge.fml.relauncher.SideOnly;
2020

21-
@SideOnly(Side.CLIENT)
21+
@SideOnly(Side.CLIENT) // 8 4
2222
public class DDProxyClient extends DDProxyCommon {
2323

2424
@Override
2525
public void onPreInitialization(FMLPreInitializationEvent event) {
2626
super.onPreInitialization(event);
27-
//ModelManager.addCustomStateMappers();
27+
// ModelManager.addCustomStateMappers(); // TODO: fix this
2828
ModelManager.registerModelVariants();
2929
registerRenderers();
3030
}

src/main/java/com/zixiken/dimdoors/client/GoggleRiftFX.java

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.zixiken.dimdoors.client;
2+
3+
import com.zixiken.dimdoors.shared.util.WorldUtils;
4+
import com.zixiken.dimdoors.shared.world.DimDoorDimensions;
5+
import net.minecraft.client.particle.ParticleFirework;
6+
import net.minecraft.client.particle.ParticleSimpleAnimated;
7+
import net.minecraft.client.renderer.BufferBuilder;
8+
import net.minecraft.entity.Entity;
9+
import net.minecraft.world.World;
10+
11+
// This has exactly the same appearence as the 1.6.4 mod.
12+
public class ParticleRiftEffect extends ParticleSimpleAnimated { // TODO: colors, density
13+
14+
private float colorMultiplier;
15+
16+
public ParticleRiftEffect(World world, double x, double y, double z, double motionX, double motionY, double motionZ, float nonPocketColorMultiplier, float pocketColorMultiplier, float scale, int size, int spread) {
17+
super(world, x, y, z, 160, 8, 0);
18+
this.motionX = motionX;
19+
this.motionY = motionY;
20+
this.motionZ = motionZ;
21+
22+
particleScale *= scale;
23+
particleMaxAge = size - spread / 2 + rand.nextInt(spread);
24+
colorMultiplier = DimDoorDimensions.isPocketDimension(WorldUtils.getDim(world)) ? pocketColorMultiplier : nonPocketColorMultiplier;
25+
}
26+
27+
@Override
28+
public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) {
29+
if (particleAge < particleMaxAge / 3 || (particleAge + particleMaxAge) / 3 % 2 == 0) {
30+
float oldRed = particleRed;
31+
float oldGreen = particleGreen;
32+
float oldBlue = particleBlue;
33+
float oldAlpha = particleAlpha;
34+
setRBGColorF(colorMultiplier * particleRed, colorMultiplier * particleGreen, colorMultiplier * particleBlue);
35+
setAlphaF(0.7f);
36+
super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ);
37+
setRBGColorF(oldRed, oldGreen, oldBlue);
38+
setAlphaF(oldAlpha);
39+
}
40+
}
41+
42+
public static class Rift extends ParticleRiftEffect {
43+
public Rift(World world, double x, double y, double z, double motionX, double motionY, double motionZ) {
44+
super(world, x, y, z, motionX, motionY, motionZ, 0.0f, 0.7f, 0.55f, 38, 16);
45+
}
46+
}
47+
48+
public static class ClosingRiftEffect extends ParticleRiftEffect {
49+
public ClosingRiftEffect(World world, double x, double y, double z, double motionX, double motionY, double motionZ) {
50+
super(world, x, y, z, motionX, motionY, motionZ, 0.8f, 0.4f, 0.55f, 38, 16);
51+
}
52+
}
53+
54+
public static class GogglesRiftEffect extends ParticleRiftEffect {
55+
public GogglesRiftEffect(World world, double x, double y, double z, double motionX, double motionY, double motionZ) {
56+
super(world, x, y, z, motionX, motionY, motionZ, 0.0f, 0.7f, 0.55f, 38, 16);
57+
}
58+
}
59+
}

src/main/java/com/zixiken/dimdoors/shared/blocks/BlockRift.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package com.zixiken.dimdoors.shared.blocks;
22

33
import com.zixiken.dimdoors.DimDoors;
4-
import com.zixiken.dimdoors.client.ClosingRiftFX;
5-
import com.zixiken.dimdoors.client.GoggleRiftFX;
4+
import com.zixiken.dimdoors.client.ParticleRiftEffect;
65
import com.zixiken.dimdoors.shared.items.ModItems;
76
import com.zixiken.dimdoors.shared.tileentities.TileEntityFloatingRift;
87

98
import java.util.*;
109
import net.minecraft.block.Block;
11-
import net.minecraft.block.BlockDoor;
12-
import net.minecraft.block.BlockLiquid;
1310
import net.minecraft.block.ITileEntityProvider;
1411
import net.minecraft.block.material.EnumPushReaction;
1512
import net.minecraft.block.material.Material;
@@ -134,24 +131,27 @@ public EnumPushReaction getMobilityFlag(IBlockState state) {
134131
@Override
135132
@SideOnly(Side.CLIENT)
136133
public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) {
137-
//ArrayList<BlockPos> targets = findReachableBlocks(worldIn, pos, 2, false);
138-
//TODO: implement the parts specified in the method comment?
139-
int x = pos.getX(), y = pos.getY(), z = pos.getZ();
140-
141-
TileEntityFloatingRift tile = (TileEntityFloatingRift) worldIn.getTileEntity(pos);
142-
//renders an extra little blob on top of the actual rift location so its easier to find.
143-
// Eventually will only renderDoorRift if the player has the goggles.
144-
//FMLClientHandler.instance().getClient().effectRenderer.addEffect(new GoggleRiftFX(
145-
/* worldIn,
146-
x + .5, y + .5, z + .5,
147-
rand.nextGaussian() * 0.01D,
148-
rand.nextGaussian() * 0.01D,
149-
rand.nextGaussian() * 0.01D));*/
150-
151-
if (tile.shouldClose) { //renders an opposite color effect if it is being closed by the rift remover
152-
FMLClientHandler.instance().getClient().effectRenderer.addEffect(new ClosingRiftFX(
134+
//ArrayList<BlockPos> targets = findReachableBlocks(worldIn, pos, 2, false); // TODO
135+
TileEntityFloatingRift rift = (TileEntityFloatingRift) worldIn.getTileEntity(pos);
136+
137+
if (true) {
138+
FMLClientHandler.instance().getClient().effectRenderer.addEffect(new ParticleRiftEffect.Rift( // TODO: this effect was unfinished in the 1.6.4 mod too
139+
worldIn,
140+
pos.getX() + .5, pos.getY() + .5, pos.getZ() + .5,
141+
rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D));
142+
}
143+
144+
if (false) {
145+
FMLClientHandler.instance().getClient().effectRenderer.addEffect(new ParticleRiftEffect.GogglesRiftEffect( // TODO: this effect was unfinished in the 1.6.4 mod too
146+
worldIn,
147+
pos.getX() + .5, pos.getY() + .5, pos.getZ() + .5,
148+
rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D));
149+
}
150+
151+
if (rift.shouldClose) { // Renders an opposite color effect if it is being closed by the rift remover
152+
FMLClientHandler.instance().getClient().effectRenderer.addEffect(new ParticleRiftEffect.ClosingRiftEffect(
153153
worldIn,
154-
x + .5, y + .5, z + .5,
154+
pos.getX() + .5, pos.getY() + .5, pos.getZ() + .5,
155155
rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D, rand.nextGaussian() * 0.01D));
156156
}
157157
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.zixiken.dimdoors.shared.util;
2+
3+
import net.minecraft.entity.Entity;
4+
5+
import java.lang.reflect.Field;
6+
import java.lang.reflect.Method;
7+
import java.lang.reflect.Modifier;
8+
9+
public class MCPReflection {
10+
public static Field getMCPField(Class<?> class0, String deobfuscatedName, String obfuscatedName) throws NoSuchFieldException {
11+
Field field;
12+
try {
13+
field = class0.getDeclaredField(obfuscatedName);
14+
} catch (NoSuchFieldException e) { // Running on deobfuscated Minecraft
15+
field = class0.getDeclaredField(deobfuscatedName);
16+
}
17+
field.setAccessible(true);
18+
19+
try {
20+
Field modifiers = Field.class.getDeclaredField("modifiers");
21+
modifiers.setAccessible(true);
22+
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
23+
} catch (IllegalAccessException e) {
24+
throw new RuntimeException(e);
25+
}
26+
27+
return field;
28+
}
29+
30+
public static Method getMCPMethod(Class<?> class0, String deobfuscatedName, String obfuscatedName, Class<?> args) throws NoSuchMethodException {
31+
Method method;
32+
try {
33+
method = Entity.class.getDeclaredMethod(obfuscatedName, args);
34+
} catch (NoSuchMethodException e) { // Running on deobfuscated Minecraft
35+
method = Entity.class.getDeclaredMethod(deobfuscatedName, args);
36+
}
37+
method.setAccessible(true);
38+
return method;
39+
}
40+
}

src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.minecraft.entity.Entity;
44
import net.minecraft.entity.EntityList;
5+
import net.minecraft.entity.player.EntityPlayer;
56
import net.minecraft.entity.player.EntityPlayerMP;
67
import net.minecraft.network.play.server.*;
78
import net.minecraft.potion.PotionEffect;
@@ -76,13 +77,7 @@ public static Entity teleport(Entity entity, int newDimension, double x, double
7677
if (entity instanceof EntityPlayerMP) {
7778
EntityPlayerMP player = (EntityPlayerMP) entity;
7879
try {
79-
Field invulnerableDimensionChange;
80-
try {
81-
invulnerableDimensionChange = EntityPlayerMP.class.getDeclaredField("field_184851_cj"); // If this breaks, check that Minecraft didn't rename the field
82-
} catch (NoSuchFieldException e) { // Running on deobfuscated Minecraft
83-
invulnerableDimensionChange = EntityPlayerMP.class.getDeclaredField("invulnerableDimensionChange");
84-
}
85-
invulnerableDimensionChange.setAccessible(true);
80+
Field invulnerableDimensionChange = MCPReflection.getMCPField(EntityPlayerMP.class, "invulnerableDimensionChange", "field_184851_cj");
8681
invulnerableDimensionChange.setBoolean(player, true); // Prevent Minecraft from cancelling the position change being too big if the player is not in creative
8782
} catch (NoSuchFieldException|IllegalAccessException e) {
8883
throw new RuntimeException(e);
@@ -142,8 +137,7 @@ public static Entity teleport(Entity entity, int newDimension, double x, double
142137

143138
if (newEntity != null) {
144139
try {
145-
Method copyDataFromOld = Entity.class.getDeclaredMethod("copyDataFromOld", Entity.class);
146-
copyDataFromOld.setAccessible(true);
140+
Method copyDataFromOld = MCPReflection.getMCPMethod(Entity.class,"copyDataFromOld", "func_180432_n", Entity.class);
147141
copyDataFromOld.invoke(newEntity, entity);
148142
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
149143
throw new RuntimeException(e);

0 commit comments

Comments
 (0)