Skip to content

Commit

Permalink
Fix rune capa save/load(Thx @Ivasik for help!) and extract rune capa …
Browse files Browse the repository at this point in the history
…getting to RuneIndex

When capa stored on null EnumFacing side, it can't be loaded correctly :face_palm:
Look https://github.com/Ivasik78/KotlinWorkspace for reference of chunk capability
  • Loading branch information
hohserg1 committed Apr 6, 2020
1 parent e7850a2 commit b681b2e
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 13 deletions.
Expand Up @@ -16,7 +16,7 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class RuneStateCapabilityProvider implements ICapabilityProvider {
public class RuneStateCapabilityProvider implements ICapabilityProvider, INBTSerializable<NBTTagCompound> {

@CapabilityInject(IRuneChunkCapability.class)
public static Capability<IRuneChunkCapability> runeStateCapability;
Expand All @@ -27,12 +27,23 @@ public class RuneStateCapabilityProvider implements ICapabilityProvider {

@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == runeStateCapability;
return capability == runeStateCapability && facing == EnumFacing.UP;
}

@Nullable
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
return capability == runeStateCapability ? runeStateCapability.cast(value) : null;
return capability == runeStateCapability && facing == EnumFacing.UP ? runeStateCapability.cast(value) : null;
}

@Override
public NBTTagCompound serializeNBT() {
return (NBTTagCompound) runeStateCapability.writeNBT(value, EnumFacing.UP);
}

@Override
public void deserializeNBT(NBTTagCompound nbt) {
runeStateCapability.readNBT(value, EnumFacing.UP, nbt);

}
}
Expand Up @@ -12,8 +12,9 @@ import net.minecraftforge.client.event.RenderWorldLastEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.TickEvent
import ru.mousecray.endmagic.EM
import ru.mousecray.endmagic.capability.chunk.{RunePart, RuneState, RuneStateCapabilityProvider}
import ru.mousecray.endmagic.capability.chunk.{RunePart, RuneState}
import ru.mousecray.endmagic.client.render.rune.VolumetricBakedQuad.atlasSpriteRune
import ru.mousecray.endmagic.rune.RuneIndex
import ru.mousecray.endmagic.util.Java2Scala._
import ru.mousecray.endmagic.util.Vec2i
import ru.mousecray.endmagic.util.render.endothermic.immutable.UnpackedQuad
Expand Down Expand Up @@ -47,7 +48,7 @@ class RuneTopLayerRenderer {

getLoadedChunks.forEachRemaining {
c: Chunk =>
c.getCapability(RuneStateCapabilityProvider.runeStateCapability, null).existingRunes()
RuneIndex.getCapability(c).existingRunes()
.forEach(renderRuneTopLayer _)
}

Expand Down Expand Up @@ -76,7 +77,7 @@ class RuneTopLayerRenderer {
bufferbuilder.begin(7, DefaultVertexFormats.ITEM)

EnumFacing.values().foreach { ef =>
runeState.getRuneAtSide(ef).parts.foreach{ case (coord: Vec2i, part: RunePart) =>
runeState.getRuneAtSide(ef).parts.foreach { case (coord: Vec2i, part: RunePart) =>
val (x, y) = (coord.x, coord.y)

val quad = model.getQuads(blockState, ef, 0).get(0)
Expand Down
Expand Up @@ -6,8 +6,9 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite
import net.minecraft.util.ResourceLocation
import net.minecraftforge.client.model.pipeline.{BlockInfoLense, IVertexConsumer, VertexLighterFlat}
import ru.mousecray.endmagic.EM
import ru.mousecray.endmagic.capability.chunk.{RunePart, RuneStateCapabilityProvider}
import ru.mousecray.endmagic.capability.chunk.RunePart
import ru.mousecray.endmagic.client.render.rune.VolumetricBakedQuad._
import ru.mousecray.endmagic.rune.RuneIndex
import ru.mousecray.endmagic.util.Vec2i
import ru.mousecray.endmagic.util.render.elix_x.ecomms.color.RGBA
import ru.mousecray.endmagic.util.render.endothermic.immutable.UnpackedQuad
Expand All @@ -27,7 +28,7 @@ class VolumetricBakedQuad(quad: BakedQuad) extends BakedQuad(
val blockInfo = BlockInfoLense.get(consumer)
val pos = blockInfo.getBlockPos
val side = quad.getFace
val capability = Minecraft.getMinecraft.world.getChunkFromBlockCoords(pos).getCapability(RuneStateCapabilityProvider.runeStateCapability, null)
val capability = RuneIndex.getCapability(Minecraft.getMinecraft.world, pos)

Option(capability.getRuneState(pos)
.getRuneAtSide(quad.getFace))
Expand Down
3 changes: 2 additions & 1 deletion src/main/scala/ru/mousecray/endmagic/init/EMEvents.java
Expand Up @@ -54,6 +54,7 @@
import ru.mousecray.endmagic.entity.UnexplosibleEntityItem;
import ru.mousecray.endmagic.items.EnderArrow;
import ru.mousecray.endmagic.network.PacketTypes;
import ru.mousecray.endmagic.rune.RuneIndex;
import ru.mousecray.endmagic.tileentity.TilePhantomAvoidingBlockBase;
import ru.mousecray.endmagic.util.EnderBlockTypes;
import ru.mousecray.endmagic.util.worldgen.WorldGenUtils;
Expand All @@ -77,7 +78,7 @@ public class EMEvents {
@SubscribeEvent
public static void onChunkWatch(ChunkWatchEvent event) {
Chunk chunk = event.getChunkInstance();
IRuneChunkCapability capability = chunk.getCapability(runeStateCapability, null);
IRuneChunkCapability capability = RuneIndex.getCapability(chunk);
NBTBase nbt = runeStateCapability.writeNBT(capability, null);
if (nbt != null)
PacketTypes.SYNC_RUNE_CAPABILITY.packet().writeInt(chunk.x).writeInt(chunk.z).writeNBTTagCompound((NBTTagCompound) nbt).sendToPlayer(event.getPlayer());
Expand Down
Expand Up @@ -5,6 +5,7 @@
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.network.play.INetHandlerPlayClient;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.chunk.Chunk;
import ru.mousecray.endmagic.EM;
import ru.mousecray.endmagic.capability.chunk.IRuneChunkCapability;
Expand All @@ -13,6 +14,7 @@
import ru.mousecray.endmagic.capability.world.PhantomAvoidingGroupCapability;
import ru.mousecray.endmagic.capability.world.PhantomAvoidingGroupCapabilityProvider;
import ru.mousecray.endmagic.client.render.model.baked.FinalisedModelEnderCompass;
import ru.mousecray.endmagic.rune.RuneIndex;

import static ru.mousecray.endmagic.capability.chunk.RuneStateCapabilityProvider.*;

Expand Down Expand Up @@ -45,7 +47,7 @@ public void handlePacket(PacketCustom packetCustom, Minecraft minecraft, INetHan
break;
case SYNC_RUNE_CAPABILITY:
Chunk chunk = minecraft.world.getChunkFromChunkCoords(packetCustom.readInt(), packetCustom.readInt());
IRuneChunkCapability capability = chunk.getCapability(runeStateCapability, null);
IRuneChunkCapability capability = RuneIndex.getCapability(chunk);
runeStateCapability.readNBT(capability, null, packetCustom.readNBTTagCompound());
EM.proxy.refreshChunk(capability.existingRunes().keySet().iterator().next());
break;
Expand Down
10 changes: 7 additions & 3 deletions src/main/scala/ru/mousecray/endmagic/rune/RuneIndex.java
Expand Up @@ -4,6 +4,7 @@
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import ru.mousecray.endmagic.EM;
import ru.mousecray.endmagic.capability.chunk.*;
import ru.mousecray.endmagic.network.PacketTypes;
Expand Down Expand Up @@ -46,8 +47,11 @@ private static void sync(World world, BlockPos pos, IRuneChunkCapability capabil
.sendToDimension(world.provider.getDimension());
}

private static IRuneChunkCapability getCapability(World world, BlockPos pos) {
return world.getChunkFromBlockCoords(pos)
.getCapability(runeStateCapability, null);
public static IRuneChunkCapability getCapability(World world, BlockPos pos) {
return getCapability(world.getChunkFromBlockCoords(pos));
}

public static IRuneChunkCapability getCapability(Chunk chunk) {
return chunk.getCapability(runeStateCapability, EnumFacing.UP);
}
}

0 comments on commit b681b2e

Please sign in to comment.