Skip to content

Commit

Permalink
Getting somewhere.
Browse files Browse the repository at this point in the history
  • Loading branch information
sakura-ryoko committed Sep 18, 2024
1 parent a610220 commit cd2cac3
Show file tree
Hide file tree
Showing 41 changed files with 1,595 additions and 273 deletions.
4 changes: 4 additions & 0 deletions src/main/java/fi/dy/masa/malilib/MaLiLibInitHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import fi.dy.masa.malilib.config.ConfigManager;
import fi.dy.masa.malilib.event.InputEventHandler;
import fi.dy.masa.malilib.event.RenderEventHandler;
import fi.dy.masa.malilib.event.SyncHandler;
import fi.dy.masa.malilib.gui.GuiBase;
import fi.dy.masa.malilib.hotkeys.IHotkeyCallback;
import fi.dy.masa.malilib.hotkeys.IKeybind;
import fi.dy.masa.malilib.hotkeys.KeyAction;
import fi.dy.masa.malilib.interfaces.IInitializationHandler;
import fi.dy.masa.malilib.interfaces.IRenderer;
import fi.dy.masa.malilib.test.TestDataSync;
import fi.dy.masa.malilib.test.TestRenderHandler;

public class MaLiLibInitHandler implements IInitializationHandler
Expand All @@ -26,6 +28,8 @@ public void registerModHandlers()
RenderEventHandler.getInstance().registerTooltipLastRenderer(renderer);
RenderEventHandler.getInstance().registerWorldPreWeatherRenderer(renderer);
RenderEventHandler.getInstance().registerWorldLastRenderer(renderer);

SyncHandler.getInstance().registerSyncProvider(new TestDataSync());
}

private static class CallbackOpenConfigGui implements IHotkeyCallback
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,16 @@ public interface ISyncProvider

void requestBlockEntity(BlockPos pos, @Nullable BlockState state);

void requestBlockEntityAt(World world, BlockPos pos);

void requestEntity(int entityId);

void requestEntity(UUID uuid);

default void requestBulkData(ChunkPos chunkPos, @Nullable Box boundingBox) {}

void handleVanillaQueryNbt(int transactionId, NbtCompound nbt);

void onReceiveBlockEntity(BlockPos pos, NbtCompound nbt);

void onReceiveEntity(int entityId, NbtCompound nbt);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@

import javax.annotation.Nullable;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;

import fi.dy.masa.malilib.event.WorldLoadHandler;

@Mixin(ClientPlayNetworkHandler.class)
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/fi/dy/masa/malilib/mixin/MixinSimpleInventory.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fi.dy.masa.malilib.mixin;

import fi.dy.masa.malilib.sync.fe.FakeEntity;
import fi.dy.masa.malilib.util.IEntityOwnedInventory;
import net.minecraft.entity.Entity;
import net.minecraft.inventory.Inventory;
Expand All @@ -11,6 +12,7 @@
public abstract class MixinSimpleInventory implements IEntityOwnedInventory, Inventory
{
@Unique Entity entityOwner;
@Unique FakeEntity fakeEntityOwner;

@Override
public Entity malilib$getEntityOwner()
Expand All @@ -23,4 +25,16 @@ public abstract class MixinSimpleInventory implements IEntityOwnedInventory, Inv
{
this.entityOwner = entityOwner;
}

@Override
public FakeEntity malilib$getFakeEntityOwner()
{
return fakeEntityOwner;
}

@Override
public void malilib$setFakeEntityOwner(FakeEntity entity)
{
this.fakeEntityOwner = entity;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package fi.dy.masa.malilib.mixin.test;

import net.minecraft.client.network.DataQueryHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(DataQueryHandler.class)
public interface IMixinDataQueryHandler
{
@Accessor("expectedTransactionId")
int malilib_currentTransactionId();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package fi.dy.masa.malilib.mixin.test;

import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.network.packet.s2c.play.NbtQueryResponseS2CPacket;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import fi.dy.masa.malilib.MaLiLibConfigs;
import fi.dy.masa.malilib.test.TestDataSync;

@Mixin(ClientPlayNetworkHandler.class)
public class MixinClientPlayNetworkHandler_NbtQuery
{
@Inject(method = "onNbtQueryResponse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/DataQueryHandler;handleQueryResponse(ILnet/minecraft/nbt/NbtCompound;)Z"))
private void onQueryResponse(NbtQueryResponseS2CPacket packet, CallbackInfo ci)
{
if (MaLiLibConfigs.Test.TEST_CONFIG_BOOLEAN.getBooleanValue())
{
TestDataSync.getInstance().handleVanillaQueryNbt(packet.getTransactionId(), packet.getNbt() != null ? packet.getNbt() : new NbtCompound());
}
}
}
10 changes: 10 additions & 0 deletions src/main/java/fi/dy/masa/malilib/render/InventoryOverlay.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import net.minecraft.util.math.MathHelper;

import fi.dy.masa.malilib.gui.GuiBase;
import fi.dy.masa.malilib.sync.fe.FakeHorse;
import fi.dy.masa.malilib.sync.fe.FakePiglin;
import fi.dy.masa.malilib.util.IEntityOwnedInventory;

public class InventoryOverlay
Expand Down Expand Up @@ -282,10 +284,18 @@ else if (inv instanceof IEntityOwnedInventory inventory)
{
return InventoryRenderType.HORSE;
}
else if (inventory.malilib$getFakeEntityOwner() instanceof FakeHorse)
{
return InventoryRenderType.HORSE;
}
else if (inventory.malilib$getEntityOwner() instanceof PiglinEntity)
{
return InventoryRenderType.VILLAGER;
}
else if (inventory.malilib$getFakeEntityOwner() instanceof FakePiglin)
{
return InventoryRenderType.VILLAGER;
}
}
return InventoryRenderType.GENERIC;
}
Expand Down
51 changes: 2 additions & 49 deletions src/main/java/fi/dy/masa/malilib/sync/cache/FakeEntityList.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,22 @@
import javax.annotation.Nullable;
import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;

import fi.dy.masa.malilib.sync.fe.FakeEntity;

public class FakeEntityList implements AutoCloseable
{
private Int2ObjectMap<FakeEntity> entities = new Int2ObjectLinkedOpenHashMap<>();
private Int2ObjectMap<FakeEntity> safe = new Int2ObjectLinkedOpenHashMap<>();
private Int2ObjectMap<FakeEntity> iterate = new Int2ObjectLinkedOpenHashMap<>();

public FakeEntityList() {}

private void checkSafe()
{
if (this.iterate == this.entities)
{
this.safe.clear();

for (Int2ObjectMap.Entry<FakeEntity> fakeEntityEntry : Int2ObjectMaps.fastIterable(this.entities))
{
this.safe.put(fakeEntityEntry.getIntKey(), fakeEntityEntry.getValue());
}

Int2ObjectMap<FakeEntity> int2ObjectMap = this.entities;
this.entities = this.safe;
this.safe = int2ObjectMap;
}
}

public void add(FakeEntity entity)
{
this.checkSafe();
this.entities.put(entity.getId(), entity);
}

public void remove(FakeEntity entity)
{
this.checkSafe();
this.entities.remove(entity.getId());
}

Expand All @@ -53,7 +31,6 @@ public boolean has(FakeEntity entity)
@Nullable
public FakeEntity get(int id)
{
this.checkSafe();
if (this.entities.containsKey(id))
{
return this.entities.get(id);
Expand All @@ -64,38 +41,14 @@ public FakeEntity get(int id)

public void forEach(Consumer<FakeEntity> action)
{
if (this.iterate == null)
for (FakeEntity entity : this.entities.values())
{
this.iterate = this.entities;

try
{
for (FakeEntity entity : this.entities.values())
{
action.accept(entity);
}
}
finally
{
this.iterate = null;
}
action.accept(entity);
}
}

public void clear()
{
if (this.iterate != null)
{
this.iterate.forEach((i, e) -> e.clear());
this.iterate.clear();
this.iterate = null;
}
if (this.safe != null)
{
this.safe.forEach((i, e) -> e.clear());
this.safe.clear();
this.safe = null;
}
if (this.entities != null)
{
this.entities.forEach((i, e) -> e.clear());
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/fi/dy/masa/malilib/sync/cache/SyncCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import fi.dy.masa.malilib.sync.fbe.FakeBlockEntity;
import fi.dy.masa.malilib.sync.fe.FakeEntity;
import fi.dy.masa.malilib.util.EntityUtils;

public class SyncCache implements AutoCloseable
{
Expand Down Expand Up @@ -142,6 +143,11 @@ public int getRegularEntityCount()
return this.entityManager.getEntityCount();
}

public FakeEntity createFakeEntity(Entity input)
{
return EntityUtils.toFakeEntity(input);
}

public void addEntity(FakeEntity entity)
{
this.removeEntity(entity.getId(), Entity.RemovalReason.DISCARDED);
Expand Down
30 changes: 27 additions & 3 deletions src/main/java/fi/dy/masa/malilib/sync/fe/FakeAnimal.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,17 @@
import java.util.UUID;
import org.jetbrains.annotations.Nullable;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.world.World;

public abstract class FakeAnimal extends FakePassive
public class FakeAnimal extends FakePassive implements IFakeAnimal
{
private int loveTicks;
@Nullable
Expand All @@ -20,13 +24,28 @@ public FakeAnimal(EntityType<?> type, World world, int entityId)
super(type, world, entityId);
}

public abstract boolean isBreedingItem(ItemStack stack);
public FakeAnimal(Entity input)
{
super(input);

if (input instanceof AnimalEntity)
{
this.buildAttributes(createAnimalAttributes());
this.readCustomDataFromNbt(this.getNbt());
}
}

public boolean canEat()
{
return this.loveTicks <= 0;
}

@Override
public boolean isBreedingItem(ItemStack stack)
{
return false;
}

public void setLoveTicks(int loveTicks)
{
this.loveTicks = loveTicks;
Expand Down Expand Up @@ -60,14 +79,19 @@ public void resetLoveTicks()
this.loveTicks = 0;
}

public static DefaultAttributeContainer.Builder createAnimalAttributes()
{
return FakeMob.createMobAttributes().add(EntityAttributes.TEMPT_RANGE, 10.0);
}

public void writeCustomDataToNbt(NbtCompound nbt)
{
super.writeCustomDataToNbt(nbt);
nbt.putInt("InLove", this.loveTicks);
if (this.lovingPlayer != null)
{
nbt.putUuid("LoveCause", this.lovingPlayer);
}
super.writeCustomDataToNbt(nbt);
}

public void readCustomDataFromNbt(NbtCompound nbt)
Expand Down
Loading

0 comments on commit cd2cac3

Please sign in to comment.