Skip to content

Commit 2118ba3

Browse files
committed
Pushed current code for Runemoro to review
1 parent bfd2a5a commit 2118ba3

File tree

3 files changed

+98
-7
lines changed

3 files changed

+98
-7
lines changed

src/main/java/org/dimdev/dimdoors/shared/rifts/targets/PrivatePocketTarget.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
package org.dimdev.dimdoors.shared.rifts.targets;
22

3+
import net.minecraft.entity.item.EntityItem;
4+
import net.minecraft.entity.player.EntityPlayer;
5+
import net.minecraft.entity.player.EntityPlayerMP;
6+
import net.minecraft.item.EnumDyeColor;
7+
import net.minecraft.item.ItemDye;
8+
import net.minecraft.tileentity.TileEntity;
9+
import net.minecraft.util.math.Vec3d;
10+
import net.minecraftforge.oredict.DyeUtils;
11+
import net.minecraftforge.oredict.OreDictionary;
312
import org.dimdev.ddutils.RGBA;
413
import org.dimdev.dimdoors.DimDoors;
514
import org.dimdev.pocketlib.PrivatePocketData;
@@ -16,6 +25,7 @@
1625
import net.minecraft.entity.Entity;
1726
import net.minecraft.nbt.NBTTagCompound;
1827

28+
import java.util.Optional;
1929
import java.util.UUID;
2030

2131
@Getter @AllArgsConstructor @Builder(toBuilder = true) @ToString
@@ -35,8 +45,7 @@ public boolean receiveEntity(Entity entity, float relativeYaw, float relativePit
3545
// set to where the pocket was first created
3646
pocket = PocketGenerator.generatePrivatePocket(virtualLocation != null ? virtualLocation.toBuilder().depth(-1).build() : null);
3747
PrivatePocketData.instance().setPrivatePocketID(uuid, pocket);
38-
((IEntityTarget) RiftRegistry.instance().getPocketEntrance(pocket).getTileEntity()).receiveEntity(entity, relativeYaw, relativePitch);
39-
RiftRegistry.instance().setLastPrivatePocketExit(uuid, location);
48+
processEntity(pocket, RiftRegistry.instance().getPocketEntrance(pocket).getTileEntity(), entity, uuid, relativeYaw, relativePitch);
4049
return true;
4150
} else {
4251
Location destLoc = RiftRegistry.instance().getPrivatePocketEntrance(uuid); // get the last used entrances
@@ -47,15 +56,33 @@ public boolean receiveEntity(Entity entity, float relativeYaw, float relativePit
4756
PrivatePocketData.instance().setPrivatePocketID(uuid, pocket);
4857
destLoc = RiftRegistry.instance().getPocketEntrance(pocket);
4958
}
50-
((IEntityTarget) destLoc.getTileEntity()).receiveEntity(entity, relativeYaw, relativePitch);
51-
RiftRegistry.instance().setLastPrivatePocketExit(uuid, location);
59+
60+
System.out.println("Herp");
61+
processEntity(pocket, destLoc.getTileEntity(), entity, uuid, relativePitch, relativePitch);
5262
return true;
5363
}
5464
} else {
5565
return false;
5666
}
5767
}
5868

69+
private void processEntity(Pocket pocket, TileEntity tileEntity, Entity entity, UUID uuid, float relativeYaw, float relativePitch) {
70+
if(entity instanceof EntityItem) {
71+
Optional<EnumDyeColor> dye = DyeUtils.colorFromStack(((EntityItem) entity).getItem());
72+
73+
System.out.println(((EntityItem) entity).getItem().getItem().getRegistryName());
74+
75+
if(dye.isPresent() && pocket.addDye(entity.world.getPlayerEntityByName(((EntityItem) entity).getThrower()), dye.get())) {
76+
entity.setDead();
77+
} else {
78+
((IEntityTarget) tileEntity).receiveEntity(entity, relativeYaw, relativePitch);
79+
}
80+
} else {
81+
((IEntityTarget) tileEntity).receiveEntity(entity, relativeYaw, relativePitch);
82+
RiftRegistry.instance().setLastPrivatePocketExit(uuid, location);
83+
}
84+
}
85+
5986
@Override
6087
public RGBA getColor() {
6188
return new RGBA(0, 1, 0, 1);

src/main/java/org/dimdev/pocketlib/Pocket.java

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,30 @@
22

33
import lombok.Getter;
44
import lombok.Setter;
5+
import net.minecraft.block.state.IBlockState;
6+
import net.minecraft.entity.Entity;
57
import net.minecraft.item.EnumDyeColor;
68
import net.minecraft.nbt.NBTTagCompound;
79
import net.minecraft.util.math.BlockPos;
10+
import net.minecraft.world.World;
811
import org.dimdev.annotatednbt.NBTSerializable;
912
import org.dimdev.annotatednbt.Saved;
13+
import org.dimdev.ddutils.WorldUtils;
1014
import org.dimdev.ddutils.nbt.INBTStorable;
1115
import org.dimdev.ddutils.nbt.NBTUtils;
16+
import org.dimdev.dimdoors.DimDoors;
17+
import org.dimdev.dimdoors.shared.blocks.ModBlocks;
1218

13-
@NBTSerializable public class Pocket implements INBTStorable {
19+
import java.util.Arrays;
20+
import java.util.Collections;
1421

22+
@NBTSerializable public class Pocket implements INBTStorable {
1523
@Saved @Getter protected int id;
1624
@Saved @Getter protected int x; // Grid x TODO: convert to non-grid dependant coordinates
1725
@Saved @Getter protected int z; // Grid y
1826
@Saved @Getter @Setter protected int size; // TODO: non chunk-based size, better bounds such as minX, minZ, maxX, maxZ, etc.
1927
@Saved @Getter @Setter protected VirtualLocation virtualLocation;
28+
@Saved protected EnumDyeColor dyedColor = EnumDyeColor.WHITE;
2029
@Saved protected EnumDyeColor color;
2130
@Saved protected int count = 0;
2231

@@ -49,12 +58,64 @@ public BlockPos getOrigin() {
4958
return new BlockPos(x * gridSize * 16, 0, z * gridSize * 16);
5059
}
5160

52-
public void addDye(EnumDyeColor color) {
61+
public boolean addDye(Entity entity, EnumDyeColor color) {
62+
int maxDye = amountOfDyeRequiredToColor(this);
63+
64+
if(this.dyedColor == color) {
65+
DimDoors.sendTranslatedMessage(entity, "dimdoors.pockets.dyeAlreadyAbsorbed");
66+
return false;
67+
}
68+
5369
if(this.color != null && this.color == color) {
54-
count++;
70+
if(count+1 > amountOfDyeRequiredToColor(this)) {
71+
dyedColor = color;
72+
this.color = null;
73+
this.count = 0;
74+
DimDoors.sendTranslatedMessage(entity, "dimdoors.pocket.pocketHasBeenDyed", dyedColor);
75+
return true;
76+
} else {
77+
count++;
78+
DimDoors.sendTranslatedMessage(entity, "dimdoors.pocket.remainingNeededDyes", count, maxDye, color);
79+
return true;
80+
}
5581
} else {
5682
this.color = color;
5783
count = 1;
84+
DimDoors.sendTranslatedMessage(entity, "dimdoors.pocket.remainingNeededDyes", count, maxDye, color);
85+
return true;
86+
}
87+
}
88+
89+
/*private void repaint(EnumDyeColor dyeColor) {
90+
short size = (short) ((this.size + 1) * 16 - 1);
91+
BlockPos origin = getOrigin();
92+
World world = WorldUtils.getWorld(dim);
93+
IBlockState innerWall = ModBlocks.FABRIC.getDefaultState()..withProperty(..., dyeColor); // <-- forgot the exact name of the color property
94+
IBlockState outerWall = ModBlocks.ETERNAL_FABRIC.getDefaultState().withProperty(..., dyeColor);
95+
96+
for (int x = origin.getX(); x < origin.getX() + size; x++) {
97+
for (int y = origin.getY(); y < origin.getY() + size; y++) {
98+
for (int z = origin.getZ(); z < origin.getZ() + size; z++) {
99+
int layer = Collections.min(Arrays.asList(x, y, z, size - 1 - x, size - 1 - y, size - 1 - z));
100+
if (layer == 0) {
101+
if (world.getBlockState(x, y, z).getBlock() == ModBlocks.ETERNAL_FABRIC) {
102+
world.setBlockState(x, y, z, outerWall);
103+
}
104+
} else if (layer < 5) {
105+
if (world.getBlockState(x, y, z).getBlock() == ModBlocks.FABRIC) {
106+
world.setBlockState(x, y, z, innerWall);
107+
}
108+
}
109+
}
110+
}
58111
}
112+
113+
return schematic;
114+
}*/
115+
116+
private static int amountOfDyeRequiredToColor(Pocket pocket) {
117+
int s = 16 * pocket.getSize();
118+
119+
return (int) ((Math.pow(s, 3) - Math.pow(s - 10, 3))/1106);
59120
}
60121
}

src/main/resources/assets/dimdoors/lang/en_US.lang

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ dimdoors.pockets.loadAllSchematics=Load All Schematics
162162
dimdoors.pockets.loadAllSchematics.tooltip= When true, all available Pocket Schematics will be loaded on game-start, even if the gridSize and pocketSize configuration fields would exclude these schematics from being used in 'naturally generated' pockets. The /pocket command can be used to force-generate these pockets for dungeon building or testing purposes.
163163
dimdoors.pockets.cachedSchematics=Maximum number of cached schematics
164164
dimdoors.pockets.cachedSchematics.tooltip= The maximum number of schematics cached as NBT instead of bytes. If a schematic is cached, it will be faster to place, but takes up more RAM. Schematics that are used more are more likely to be cached. The cache resets on restart.
165+
dimdoors.pockets.dyeAlreadyAbsorbed=The pocket is already that color, so the rift didn't absorb the dye.
166+
dimdoors.pocket.pocketHasBeenDyed=The pocket has been dyed %s.
167+
dimdoors.pocket.remainingNeededDyes=The pocket has %s/%s of the dyes needed to be colored %s.
165168

166169
dimdoors.world=World Generation Settings
167170
dimdoors.world.tooltip=Settings that determine where dimensional gateways and rift clusters can be generated and at what frequency

0 commit comments

Comments
 (0)