More Rendering fixes

This commit is contained in:
Sebastian Hartte
2020-06-08 18:35:27 +02:00
parent 679ea1c332
commit b2afa0398c
44 changed files with 427 additions and 276 deletions
@@ -0,0 +1,43 @@
package appeng.tile.crafting;
import appeng.client.render.model.AEModelData;
import com.google.common.base.Preconditions;
import net.minecraft.util.Direction;
import java.util.EnumSet;
import java.util.Objects;
public class CraftingCubeModelData extends AEModelData {
// Contains information on which sides of the block are connected to other parts of a formed crafting cube
private final EnumSet<Direction> connections;
public CraftingCubeModelData(Direction up, Direction forward, EnumSet<Direction> connections) {
super(up, forward);
this.connections = Preconditions.checkNotNull(connections);
}
@Override
public boolean isCacheable() {
return false; // Too many variants
}
public EnumSet<Direction> getConnections() {
return connections;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
CraftingCubeModelData that = (CraftingCubeModelData) o;
return connections.equals(that.connections);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), connections);
}
}
@@ -0,0 +1,37 @@
package appeng.tile.crafting;
import appeng.api.util.AEColor;
import com.google.common.base.Preconditions;
import net.minecraft.util.Direction;
import java.util.EnumSet;
import java.util.Objects;
public class CraftingMonitorModelData extends CraftingCubeModelData {
private final AEColor color;
public CraftingMonitorModelData(Direction up, Direction forward, EnumSet<Direction> connections, AEColor color) {
super(up, forward, connections);
this.color = Preconditions.checkNotNull(color);
}
public AEColor getColor() {
return color;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
CraftingMonitorModelData that = (CraftingMonitorModelData) o;
return color == that.color;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), color);
}
}
@@ -22,7 +22,6 @@ package appeng.tile.crafting;
import java.io.IOException;
import java.util.Optional;
import appeng.block.AEBaseTileBlock;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
@@ -38,8 +37,6 @@ import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.AEColor;
import appeng.util.item.AEItemStack;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.data.ModelDataMap;
import net.minecraftforge.client.model.data.ModelProperty;
import javax.annotation.Nonnull;
@@ -47,8 +44,6 @@ import javax.annotation.Nonnull;
public class TileCraftingMonitorTile extends TileCraftingTile implements IColorableTile
{
public static final ModelProperty<AEColor> COLOR = new ModelProperty<>();
@OnlyIn( Dist.CLIENT )
private Integer dspList;
@@ -204,11 +199,7 @@ public class TileCraftingMonitorTile extends TileCraftingTile implements IColora
@Nonnull
@Override
public IModelData getModelData() {
return new ModelDataMap.Builder()
.withInitial(AEBaseTileBlock.FORWARD, getForward())
.withInitial(AEBaseTileBlock.UP, getUp())
.withInitial(COLOR, getColor())
.build();
return new CraftingMonitorModelData(getUp(), getForward(), getConnections(), getColor());
}
}
@@ -25,7 +25,6 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.Optional;
import appeng.client.render.crafting.CraftingCubeState;
import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
@@ -61,7 +60,7 @@ import net.minecraft.world.IBlockReader;
import net.minecraftforge.client.model.data.EmptyModelData;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.data.ModelDataMap;
import net.minecraftforge.client.model.data.ModelProperty;
import net.minecraftforge.common.util.Constants;
import javax.annotation.Nonnull;
@@ -69,8 +68,6 @@ import javax.annotation.Nonnull;
public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IPowerChannelState
{
public static final ModelProperty<CraftingCubeState> STATE = new ModelProperty<>();
private final CraftingCPUCalculator calc = new CraftingCPUCalculator( this );
private CompoundNBT previousState = null;
private boolean isCoreBlock = false;
@@ -183,7 +180,7 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
{
// Not using flag 2 here (only send to clients, prevent block update) will cause infinite loops
// In case there is an inconsistency in the crafting clusters.
this.world.setBlockState( this.pos, newState, 2 );
this.world.setBlockState( this.pos, newState, Constants.BlockFlags.BLOCK_UPDATE);
}
}
@@ -394,12 +391,15 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
this.previousState = previousState;
}
// FIXME: REMOVE AND MOVE TO IDynamicBakedModel!
@Nonnull
@Override
public IModelData getModelData() {
return new CraftingCubeModelData(getUp(), getForward(), getConnections());
}
protected EnumSet<Direction> getConnections() {
if (world == null) {
return EmptyModelData.INSTANCE;
return EnumSet.noneOf(Direction.class);
}
EnumSet<Direction> connections = EnumSet.noneOf( Direction.class );
@@ -412,9 +412,7 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
}
}
return new ModelDataMap.Builder()
.withInitial(STATE, new CraftingCubeState( connections ))
.build();
return connections;
}
private boolean isConnected( IBlockReader world, BlockPos pos, Direction side )
@@ -423,4 +421,14 @@ public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IP
return world.getBlockState( adjacentPos ).getBlock() instanceof AbstractCraftingUnitBlock;
}
/**
* When the block state changes (i.e. becoming formed or unformed), we need to update the
* model data since it contains connections to neighboring tiles.
*/
@Override
public void updateContainingBlockInfo() {
super.updateContainingBlockInfo();
requestModelDataUpdate();
}
}