Redo rendering of the molecular assembler and it's animation

This commit is contained in:
Sebastian Hartte
2020-06-18 17:14:53 +02:00
parent 10ab5d0d5a
commit 98d6740bb2
21 changed files with 338 additions and 561 deletions
-1
View File
@@ -182,7 +182,6 @@ public final class AppEng {
((ClientHelper) proxy).clientInit();
RenderingRegistry.registerEntityRenderingHandler(EntityTinyTNTPrimed.TYPE, RenderTinyTNTPrimed::new);
RenderingRegistry.registerEntityRenderingHandler(EntityFloatingItem.TYPE, RenderFloatingItem::new);
RenderingRegistry.registerEntityRenderingHandler(EntitySingularity.TYPE,
m -> new ItemRenderer(m, Minecraft.getInstance().getItemRenderer()));
RenderingRegistry.registerEntityRenderingHandler(EntityGrowingCrystal.TYPE,
+7 -8
View File
@@ -18,6 +18,7 @@
package appeng.core;
import appeng.tile.crafting.MolecularAssemblerRenderer;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
@@ -90,7 +91,6 @@ import appeng.core.features.registries.cell.CreativeCellHandler;
import appeng.core.stats.AdvancementTriggers;
import appeng.core.stats.AeStats;
import appeng.core.stats.PartItemPredicate;
import appeng.entity.EntityFloatingItem;
import appeng.fluids.client.gui.*;
import appeng.fluids.container.*;
import appeng.fluids.registries.BasicFluidCellGuiHandler;
@@ -173,6 +173,7 @@ final class Registration {
ModelLoader.addSpecialModel(BiometricCardModel.MODEL_BASE);
ModelLoader.addSpecialModel(MemoryCardModel.MODEL_BASE);
DriveModel.DEPENDENCIES.forEach(ModelLoader::addSpecialModel);
ModelLoader.addSpecialModel(MolecularAssemblerRenderer.LIGHTS_MODEL);
PartModels partModels = (PartModels) Api.INSTANCE.registries().partModels();
partModels.getModels().forEach(ModelLoader::addSpecialModel);
@@ -357,11 +358,6 @@ final class Registration {
}
public void registerEntities(RegistryEvent.Register<EntityType<?>> event) {
// Special case only used on the client-side
EntityFloatingItem.TYPE = EntityType.Builder
.<EntityFloatingItem>create(EntityFloatingItem::new, EntityClassification.MISC)
.build("appliedenergistics2:floating_item");
final IForgeRegistry<EntityType<?>> registry = event.getRegistry();
// TODO: Do not use the internal API
final ApiDefinitions definitions = Api.INSTANCE.definitions();
@@ -372,12 +368,15 @@ final class Registration {
public void registerParticleTypes(RegistryEvent.Register<ParticleType<?>> event) {
final IForgeRegistry<ParticleType<?>> registry = event.getRegistry();
registry.register(ChargedOreFX.TYPE);
registry.register(VibrantFX.TYPE);
registry.register(CraftingFx.TYPE);
registry.register(EnergyFx.TYPE);
registry.register(LightningArcFX.TYPE);
registry.register(LightningFX.TYPE);
registry.register(MatterCannonFX.TYPE);
registry.register(VibrantFX.TYPE);
}
public void registerParticleFactories(ParticleFactoryRegisterEvent event) {
Minecraft.getInstance().particles.registerFactory(AssemblerFX.TYPE, AssemblerFX.Factory::new);
Minecraft.getInstance().particles.registerFactory(ChargedOreFX.TYPE, ChargedOreFX.Factory::new);
Minecraft.getInstance().particles.registerFactory(CraftingFx.TYPE, CraftingFx.Factory::new);
Minecraft.getInstance().particles.registerFactory(EnergyFx.TYPE, EnergyFx.Factory::new);
@@ -22,6 +22,7 @@ import static appeng.block.AEBaseBlock.defaultProps;
import static appeng.block.crafting.AbstractCraftingUnitBlock.CraftingUnitType;
import static appeng.decorative.solid.BlockSkyStone.SkystoneType;
import appeng.tile.crafting.*;
import net.minecraft.block.*;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.RenderType;
@@ -69,10 +70,6 @@ import appeng.entity.EntityTinyTNTPrimed;
import appeng.fluids.block.BlockFluidInterface;
import appeng.fluids.tile.TileFluidInterface;
import appeng.hooks.DispenserBehaviorTinyTNT;
import appeng.tile.crafting.TileCraftingMonitorTile;
import appeng.tile.crafting.TileCraftingStorageTile;
import appeng.tile.crafting.TileCraftingTile;
import appeng.tile.crafting.TileMolecularAssembler;
import appeng.tile.grindstone.TileCrank;
import appeng.tile.grindstone.TileGrinder;
import appeng.tile.misc.*;
@@ -459,18 +456,18 @@ public final class ApiBlocks implements IBlocks {
@OnlyIn(Dist.CLIENT)
@Override
public void customize(IBlockRendering rendering, IItemRendering itemRendering) {
// FIXME: This is an old comment, check if it still applies
/**
* NOTE: This is only used to determine how to render an item being held in
* hand. For determining block rendering, the method below is used
* (canRenderInLayer).
*/
rendering.renderType(RenderType.getCutout());
rendering.renderType(rt -> rt == RenderType.getCutout() || rt == RenderType.getTranslucent());
}
})
.tileEntity(registry
.tileEntity("molecular_assembler", TileMolecularAssembler.class, TileMolecularAssembler::new)
.rendering(new TileEntityRenderingCustomizer<TileMolecularAssembler>() {
@Override
@OnlyIn(Dist.CLIENT)
public void customize(TileEntityRendering<TileMolecularAssembler> rendering) {
rendering.tileEntityRenderer(MolecularAssemblerRenderer::new);
}
})
.build())
.build();
@@ -18,35 +18,28 @@
package appeng.core.sync.packets;
import java.io.IOException;
import appeng.api.storage.data.IAEItemStack;
import appeng.core.sync.AppEngPacket;
import appeng.core.sync.network.INetworkInfo;
import appeng.tile.crafting.AssemblerAnimationStatus;
import appeng.tile.crafting.TileMolecularAssembler;
import appeng.util.item.AEItemStack;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import appeng.api.storage.data.IAEItemStack;
import appeng.client.EffectType;
import appeng.core.AppEng;
import appeng.core.sync.AppEngPacket;
import appeng.core.sync.network.INetworkInfo;
import appeng.util.item.AEItemStack;
public class PacketAssemblerAnimation extends AppEngPacket {
private final int x;
private final int y;
private final int z;
private final BlockPos pos;
public final byte rate;
public final IAEItemStack is;
public PacketAssemblerAnimation(final PacketBuffer stream) {
this.x = stream.readInt();
this.y = stream.readInt();
this.z = stream.readInt();
this.pos = stream.readBlockPos();
this.rate = stream.readByte();
this.is = AEItemStack.fromPacket(stream);
}
@@ -57,9 +50,7 @@ public class PacketAssemblerAnimation extends AppEngPacket {
final PacketBuffer data = new PacketBuffer(Unpooled.buffer());
data.writeInt(this.getPacketID());
data.writeInt(this.x = pos.getX());
data.writeInt(this.y = pos.getY());
data.writeInt(this.z = pos.getZ());
data.writeBlockPos(this.pos = pos);
data.writeByte(this.rate = rate);
is.writeToPacket(data);
this.is = is;
@@ -70,11 +61,10 @@ public class PacketAssemblerAnimation extends AppEngPacket {
@Override
@OnlyIn(Dist.CLIENT)
public void clientPacketData(final INetworkInfo network, final PlayerEntity player) {
final double d0 = 0.5d;// + ((double) (Platform.getRandomFloat() - 0.5F) * 0.26D);
final double d1 = 0.5d;// + ((double) (Platform.getRandomFloat() - 0.5F) * 0.26D);
final double d2 = 0.5d;// + ((double) (Platform.getRandomFloat() - 0.5F) * 0.26D);
AppEng.proxy.spawnEffect(EffectType.Assembler, player.getEntityWorld(), this.x + d0, this.y + d1, this.z + d2,
this);
TileEntity te = player.getEntityWorld().getTileEntity(pos);
if (te instanceof TileMolecularAssembler) {
TileMolecularAssembler ma = (TileMolecularAssembler) te;
ma.setAnimationStatus(new AssemblerAnimationStatus(rate, is.asItemStackRepresentation()));
}
}
}