Skip to content

Commit c00ffce

Browse files
authored
added gui factory for entity gui holder (#164)
1 parent 35d0b44 commit c00ffce

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.cleanroommc.modularui.factory;
2+
3+
import net.minecraft.entity.Entity;
4+
import net.minecraft.entity.player.EntityPlayer;
5+
6+
public class EntityGuiData extends GuiData {
7+
8+
private final Entity guiHolder;
9+
10+
public EntityGuiData(EntityPlayer player, Entity guiHolder) {
11+
super(player);
12+
this.guiHolder = guiHolder;
13+
}
14+
15+
public Entity getGuiHolder() {
16+
return guiHolder;
17+
}
18+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.cleanroommc.modularui.factory;
2+
3+
import com.cleanroommc.modularui.api.IGuiHolder;
4+
5+
import net.minecraft.entity.Entity;
6+
import net.minecraft.entity.player.EntityPlayer;
7+
import net.minecraft.entity.player.EntityPlayerMP;
8+
import net.minecraft.network.PacketBuffer;
9+
10+
import org.jetbrains.annotations.NotNull;
11+
12+
import java.util.Objects;
13+
14+
public class EntityGuiFactory extends AbstractUIFactory<EntityGuiData> {
15+
16+
public static EntityGuiFactory INSTANCE = new EntityGuiFactory();
17+
18+
protected EntityGuiFactory() {
19+
super("mui:entity");
20+
}
21+
22+
public <E extends Entity & IGuiHolder<EntityGuiData>> void open(EntityPlayer player, E entity) {
23+
Objects.requireNonNull(player);
24+
verifyEntity(player, entity);
25+
GuiManager.open(this, new EntityGuiData(player, entity), (EntityPlayerMP) player);
26+
}
27+
28+
private static <E extends Entity & IGuiHolder<EntityGuiData>> void verifyEntity(EntityPlayer player, E entity) {
29+
Objects.requireNonNull(entity);
30+
if (!entity.isEntityAlive()) {
31+
throw new IllegalArgumentException("Can't open dead Entity GUI!");
32+
} else if (player.world != entity.world) {
33+
throw new IllegalArgumentException("Entity must be in same dimension as the player!");
34+
}
35+
}
36+
37+
@Override
38+
public @NotNull IGuiHolder<EntityGuiData> getGuiHolder(EntityGuiData guiData) {
39+
return Objects.requireNonNull(castGuiHolder(guiData.getGuiHolder()), "Found Entity is not a gui holder!");
40+
}
41+
42+
@Override
43+
public void writeGuiData(EntityGuiData guiData, PacketBuffer packetBuffer) {
44+
packetBuffer.writeInt(guiData.getGuiHolder().getEntityId());
45+
}
46+
47+
@Override
48+
public @NotNull EntityGuiData readGuiData(EntityPlayer entityPlayer, PacketBuffer packetBuffer) {
49+
return new EntityGuiData(entityPlayer, entityPlayer.world.getEntityByID(packetBuffer.readInt()));
50+
}
51+
52+
@Override
53+
public boolean canInteractWith(EntityPlayer player, EntityGuiData guiData) {
54+
Entity guiHolder = guiData.getGuiHolder();
55+
return super.canInteractWith(player, guiData) &&
56+
guiHolder != null &&
57+
player.getDistanceSq(guiHolder.posX, guiHolder.posY, guiHolder.posZ) <= 64 &&
58+
player.world == guiHolder.world &&
59+
guiHolder.isEntityAlive();
60+
}
61+
}

src/main/java/com/cleanroommc/modularui/factory/GuiFactories.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ public static SidedTileEntityGuiFactory sidedTileEntity() {
1616
return SidedTileEntityGuiFactory.INSTANCE;
1717
}
1818

19+
public static EntityGuiFactory entity() {
20+
return EntityGuiFactory.INSTANCE;
21+
}
22+
1923
@Deprecated
2024
public static ItemGuiFactory item() {
2125
return ItemGuiFactory.INSTANCE;
@@ -37,6 +41,7 @@ public static SimpleGuiFactory createSimple(String name, Supplier<IGuiHolder<Gui
3741
public static void init() {
3842
GuiManager.registerFactory(tileEntity());
3943
GuiManager.registerFactory(sidedTileEntity());
44+
GuiManager.registerFactory(entity());
4045
GuiManager.registerFactory(item());
4146
GuiManager.registerFactory(playerInventory());
4247
}

0 commit comments

Comments
 (0)