use of com.minecolonies.api.colony.IColonyView in project minecolonies by ldtteam.
the class ItemScepterPermission method useOn.
/**
* Used when clicking on block in world.
*
* @return the result
*/
@Override
@NotNull
public ActionResultType useOn(final ItemUseContext ctx) {
if (!ctx.getLevel().isClientSide) {
return ActionResultType.SUCCESS;
}
final ItemStack scepter = ctx.getPlayer().getItemInHand(ctx.getHand());
if (!scepter.hasTag()) {
scepter.setTag(new CompoundNBT());
}
final IColonyView iColonyView = IColonyManager.getInstance().getClosestColonyView(ctx.getLevel(), ctx.getClickedPos());
if (iColonyView == null) {
return ActionResultType.FAIL;
}
final CompoundNBT compound = scepter.getTag();
return handleItemAction(compound, ctx.getPlayer(), ctx.getLevel(), ctx.getClickedPos(), iColonyView);
}
use of com.minecolonies.api.colony.IColonyView in project minecolonies by ldtteam.
the class ColonyBorderMapping method updateChunk.
/**
* Flags the colony border overlay for update, if needed for a single just-loaded chunk.
*
* @param jmap The JourneyMap API
* @param dimension The dimension of the world. Nothing happens unless this is the client world.
* @param chunk The chunk that was just loaded.
*/
public static void updateChunk(@NotNull final Journeymap jmap, @NotNull final RegistryKey<World> dimension, @NotNull final Chunk chunk) {
final World world = Minecraft.getInstance().level;
if (world == null || !dimension.equals(world.dimension()))
return;
final Map<Integer, ColonyBorderOverlay> dimensionOverlays = overlays.get(dimension);
// not ready yet
if (dimensionOverlays == null)
return;
boolean changed = false;
final int id = getOwningColonyForChunk(chunk);
if (id == 0) {
for (final Map<Integer, ColonyBorderOverlay> overlayMap : overlays.values()) {
for (final ColonyBorderOverlay overlay : overlayMap.values()) {
changed |= overlay.updateChunks(Collections.emptySet(), Collections.singleton(chunk.getPos()));
}
}
} else {
final IColonyManager colonyManager = MinecoloniesAPIProxy.getInstance().getColonyManager();
final IColonyView colony = colonyManager.getColonyView(id, dimension);
final ColonyBorderOverlay overlay = dimensionOverlays.computeIfAbsent(id, k -> new ColonyBorderOverlay(dimension, id));
changed |= overlay.updateChunks(Collections.singleton(chunk.getPos()), Collections.emptySet());
changed |= overlay.updateInfo(colony, JourneymapOptions.getShowColonyName(jmap.getOptions()));
}
}
use of com.minecolonies.api.colony.IColonyView in project minecolonies by ldtteam.
the class DebugRendererChunkBorder method renderWorldLastEvent.
public static void renderWorldLastEvent(@NotNull final RenderWorldLastEvent event) {
final PlayerEntity player = Minecraft.getInstance().player;
if (player.getItemInHand(Hand.MAIN_HAND).getItem() != ModItems.buildTool.get()) {
return;
}
final World world = Minecraft.getInstance().level;
final IColonyView nearestColonyView = IColonyManager.getInstance().getClosestColonyView(world, player.blockPosition());
if (nearestColonyView == null) {
return;
}
final ChunkPos playerChunkPos = new ChunkPos(player.blockPosition());
final int playerRenderDist = Math.max(Minecraft.getInstance().options.renderDistance - RENDER_DIST_THRESHOLD, 2);
if (lastColonyView != nearestColonyView || !lastPlayerChunk.equals(playerChunkPos)) {
lastColonyView = nearestColonyView;
lastPlayerChunk = playerChunkPos;
final Map<ChunkPos, Integer> coloniesMap = new HashMap<>();
final Map<ChunkPos, Integer> chunkticketsMap = new HashMap<>();
final int range = Math.max(Minecraft.getInstance().options.renderDistance, MineColonies.getConfig().getServer().maxColonySize.get());
for (int chunkX = -range; chunkX <= range; chunkX++) {
for (int chunkZ = -range; chunkZ <= range; chunkZ++) {
final Chunk chunk = world.getChunk(playerChunkPos.x + chunkX, playerChunkPos.z + chunkZ);
chunk.getCapability(CLOSE_COLONY_CAP, null).ifPresent(cap -> coloniesMap.put(chunk.getPos(), cap.getOwningColony()));
if (nearestColonyView.getTicketedChunks().contains(chunk.getPos().toLong())) {
chunkticketsMap.put(chunk.getPos(), nearestColonyView.getID());
} else {
chunkticketsMap.put(chunk.getPos(), 0);
}
}
}
final BufferBuilder bufferbuilder = Tessellator.getInstance().getBuilder();
colonies = draw(bufferbuilder, coloniesMap, nearestColonyView.getID(), playerChunkPos, playerRenderDist);
chunktickets = draw(bufferbuilder, chunkticketsMap, nearestColonyView.getID(), playerChunkPos, playerRenderDist);
}
final Vector3d currView = Minecraft.getInstance().getEntityRenderDispatcher().camera.getPosition();
final MatrixStack stack = event.getMatrixStack();
final Pair<DrawState, ByteBuffer> buffer = InputMappings.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_CONTROL) ? chunktickets : colonies;
stack.pushPose();
stack.translate(-currView.x, -currView.y, -currView.z);
RenderSystem.enableDepthTest();
RenderSystem.shadeModel(7425);
RenderSystem.enableAlphaTest();
RenderSystem.defaultAlphaFunc();
RenderSystem.disableTexture();
RenderSystem.disableBlend();
RenderSystem.lineWidth(1.0F);
RenderSystem.pushMatrix();
RenderSystem.loadIdentity();
RenderSystem.multMatrix(stack.last().pose());
WorldVertexBufferUploader._end(buffer.getSecond(), buffer.getFirst().mode(), buffer.getFirst().format(), buffer.getFirst().vertexCount());
RenderSystem.popMatrix();
RenderSystem.lineWidth(1.0F);
RenderSystem.enableBlend();
RenderSystem.enableTexture();
RenderSystem.shadeModel(7424);
stack.popPose();
}
use of com.minecolonies.api.colony.IColonyView in project minecolonies by ldtteam.
the class DebugRendererChunkBorder method draw.
private static Pair<DrawState, ByteBuffer> draw(final BufferBuilder bufferbuilder, final Map<ChunkPos, Integer> mapToDraw, final int playerColonyId, final ChunkPos playerChunkPos, final int playerRenderDist) {
bufferbuilder.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR);
final MutableChunkPos mutableChunkPos = new MutableChunkPos(0, 0);
final Map<Integer, Color> colonyColours = new HashMap<>();
final boolean useColonyColour = IMinecoloniesAPI.getInstance().getConfig().getClient().colonyteamborders.get();
mapToDraw.forEach((chunkPos, colonyId) -> {
if (colonyId == 0 || chunkPos.x <= playerChunkPos.x - playerRenderDist || chunkPos.x >= playerChunkPos.x + playerRenderDist || chunkPos.z <= playerChunkPos.z - playerRenderDist || chunkPos.z >= playerChunkPos.z + playerRenderDist) {
return;
}
final boolean isPlayerChunkX = colonyId == playerColonyId && chunkPos.x == playerChunkPos.x;
final boolean isPlayerChunkZ = colonyId == playerColonyId && chunkPos.z == playerChunkPos.z;
final double minX = chunkPos.getMinBlockX() + LINE_SHIFT;
final double maxX = chunkPos.getMaxBlockX() + 1.0d - LINE_SHIFT;
final double minZ = chunkPos.getMinBlockZ() + LINE_SHIFT;
final double maxZ = chunkPos.getMaxBlockZ() + 1.0d - LINE_SHIFT;
final int red;
final int green;
final int blue;
final int alpha = 255;
final int testedColonyId = colonyId;
if (useColonyColour) {
final Color colour = colonyColours.computeIfAbsent(colonyId, id -> {
final IColonyView colony = IMinecoloniesAPI.getInstance().getColonyManager().getColonyView(id, Minecraft.getInstance().level.dimension());
final TextFormatting team = colony != null ? colony.getTeamColonyColor() : id == playerColonyId ? TextFormatting.WHITE : TextFormatting.RED;
return new Color(team.getColor());
});
red = colour.getRed();
green = colour.getGreen();
blue = colour.getBlue();
} else if (colonyId == playerColonyId) {
red = 255;
green = 255;
blue = 255;
} else {
red = 255;
green = 70;
blue = 70;
}
mutableChunkPos.setX(chunkPos.x);
mutableChunkPos.setZ(chunkPos.z - 1);
final boolean north = mapToDraw.containsKey(mutableChunkPos) && mapToDraw.get(mutableChunkPos) != testedColonyId;
mutableChunkPos.setZ(chunkPos.z + 1);
final boolean south = mapToDraw.containsKey(mutableChunkPos) && mapToDraw.get(mutableChunkPos) != testedColonyId;
mutableChunkPos.setX(chunkPos.x + 1);
mutableChunkPos.setZ(chunkPos.z);
final boolean east = mapToDraw.containsKey(mutableChunkPos) && mapToDraw.get(mutableChunkPos) != testedColonyId;
mutableChunkPos.setX(chunkPos.x - 1);
final boolean west = mapToDraw.containsKey(mutableChunkPos) && mapToDraw.get(mutableChunkPos) != testedColonyId;
// vert lines
if (north || west) {
bufferbuilder.vertex(minX, 0, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(minX, CHUNK_HEIGHT, minZ).color(red, green, blue, alpha).endVertex();
}
if (north || east) {
bufferbuilder.vertex(maxX, 0, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, CHUNK_HEIGHT, minZ).color(red, green, blue, alpha).endVertex();
}
if (south || west) {
bufferbuilder.vertex(minX, 0, maxZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(minX, CHUNK_HEIGHT, maxZ).color(red, green, blue, alpha).endVertex();
}
if (south || east) {
bufferbuilder.vertex(maxX, 0, maxZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, CHUNK_HEIGHT, maxZ).color(red, green, blue, alpha).endVertex();
}
// horizontal lines
if (north) {
if (isPlayerChunkX) {
for (int shift = PLAYER_CHUNK_STEP; shift < CHUNK_SIZE; shift += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(minX + shift, 0, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(minX + shift, CHUNK_HEIGHT, minZ).color(red, green, blue, alpha).endVertex();
}
for (int y = PLAYER_CHUNK_STEP; y < CHUNK_HEIGHT; y += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(minX, y, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, y, minZ).color(red, green, blue, alpha).endVertex();
}
} else {
for (int y = CHUNK_SIZE; y < CHUNK_HEIGHT; y += CHUNK_SIZE) {
bufferbuilder.vertex(minX, y, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, y, minZ).color(red, green, blue, alpha).endVertex();
}
}
}
if (south) {
if (isPlayerChunkX) {
for (int shift = PLAYER_CHUNK_STEP; shift < CHUNK_SIZE; shift += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(minX + shift, 0, maxZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(minX + shift, CHUNK_HEIGHT, maxZ).color(red, green, blue, alpha).endVertex();
}
for (int y = PLAYER_CHUNK_STEP; y < CHUNK_HEIGHT; y += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(minX, y, maxZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, y, maxZ).color(red, green, blue, alpha).endVertex();
}
} else {
for (int y = CHUNK_SIZE; y < CHUNK_HEIGHT; y += CHUNK_SIZE) {
bufferbuilder.vertex(minX, y, maxZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, y, maxZ).color(red, green, blue, alpha).endVertex();
}
}
}
if (west) {
if (isPlayerChunkZ) {
for (int shift = PLAYER_CHUNK_STEP; shift < CHUNK_SIZE; shift += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(minX, 0, minZ + shift).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(minX, CHUNK_HEIGHT, minZ + shift).color(red, green, blue, alpha).endVertex();
}
for (int y = PLAYER_CHUNK_STEP; y < CHUNK_HEIGHT; y += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(minX, y, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(minX, y, maxZ).color(red, green, blue, alpha).endVertex();
}
} else {
for (int y = CHUNK_SIZE; y < CHUNK_HEIGHT; y += CHUNK_SIZE) {
bufferbuilder.vertex(minX, y, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(minX, y, maxZ).color(red, green, blue, alpha).endVertex();
}
}
}
if (east) {
if (isPlayerChunkZ) {
for (int shift = PLAYER_CHUNK_STEP; shift < CHUNK_SIZE; shift += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(maxX, 0, minZ + shift).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, CHUNK_HEIGHT, minZ + shift).color(red, green, blue, alpha).endVertex();
}
for (int y = PLAYER_CHUNK_STEP; y < CHUNK_HEIGHT; y += PLAYER_CHUNK_STEP) {
bufferbuilder.vertex(maxX, y, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, y, maxZ).color(red, green, blue, alpha).endVertex();
}
} else {
for (int y = CHUNK_SIZE; y < CHUNK_HEIGHT; y += CHUNK_SIZE) {
bufferbuilder.vertex(maxX, y, minZ).color(red, green, blue, alpha).endVertex();
bufferbuilder.vertex(maxX, y, maxZ).color(red, green, blue, alpha).endVertex();
}
}
}
});
bufferbuilder.end();
// create bytebuffer copy since buffer builder uses slice
final Pair<DrawState, ByteBuffer> preResult = bufferbuilder.popNextBuffer();
ByteBuffer temp = GLAllocation.createByteBuffer(preResult.getSecond().capacity());
((Buffer) preResult.getSecond()).clear();
((Buffer) temp).clear();
temp.put(preResult.getSecond());
return Pair.of(preResult.getFirst(), temp);
}
use of com.minecolonies.api.colony.IColonyView in project minecolonies by ldtteam.
the class CitizenDataView method deserialize.
@Override
public void deserialize(@NotNull final PacketBuffer buf) {
name = buf.readUtf(32767);
female = buf.readBoolean();
entityId = buf.readInt();
paused = buf.readBoolean();
isChild = buf.readBoolean();
homeBuilding = buf.readBoolean() ? buf.readBlockPos() : null;
workBuilding = buf.readBoolean() ? buf.readBlockPos() : null;
// Attributes
health = buf.readFloat();
maxHealth = buf.readFloat();
saturation = buf.readDouble();
happiness = buf.readDouble();
citizenSkillHandler.read(buf.readNbt());
job = buf.readUtf(32767);
colonyId = buf.readInt();
final CompoundNBT compound = buf.readNbt();
inventory = new InventoryCitizen(this.name, true);
final ListNBT ListNBT = compound.getList("inventory", 10);
this.inventory.read(ListNBT);
this.inventory.setHeldItem(Hand.MAIN_HAND, compound.getInt(TAG_HELD_ITEM_SLOT));
this.inventory.setHeldItem(Hand.OFF_HAND, compound.getInt(TAG_OFFHAND_HELD_ITEM_SLOT));
position = buf.readBlockPos();
citizenChatOptions.clear();
final int size = buf.readInt();
for (int i = 0; i < size; i++) {
final CompoundNBT compoundNBT = buf.readNbt();
final ServerCitizenInteraction handler = (ServerCitizenInteraction) MinecoloniesAPIProxy.getInstance().getInteractionResponseHandlerDataManager().createFrom(this, compoundNBT);
citizenChatOptions.put(handler.getInquiry(), handler);
}
sortedInteractions = citizenChatOptions.values().stream().sorted(Comparator.comparingInt(e -> e.getPriority().getPriority())).collect(Collectors.toList());
citizenHappinessHandler.read(buf.readNbt());
int statusindex = buf.readInt();
statusIcon = statusindex >= 0 ? VisibleCitizenStatus.getForId(statusindex) : null;
if (buf.readBoolean()) {
final IColonyView colonyView = IColonyManager.getInstance().getColonyView(colonyId, Minecraft.getInstance().level.dimension());
jobView = IJobDataManager.getInstance().createViewFrom(colonyView, this, buf);
} else {
jobView = null;
}
children.clear();
siblings.clear();
partner = buf.readInt();
final int siblingsSize = buf.readInt();
for (int i = 0; i < siblingsSize; i++) {
siblings.add(buf.readInt());
}
final int childrenSize = buf.readInt();
for (int i = 0; i < childrenSize; i++) {
children.add(buf.readInt());
}
final String parentA = buf.readUtf();
final String parentB = buf.readUtf();
parents = new Tuple<>(parentA, parentB);
}
Aggregations