- rework on handling /log packets
 - rework on player attack and interaction with entities
 - rework display_title (need recheck)
 - rework packets for structure blocks
This commit is contained in:
gnembon committed 2021-02-24 18:25:16 -04:00
1 parent 3505138351
commit 2cf403057c
12 files changed
+95 -41

No files matched your search

+4 -4
View File
@@ -4,10 +4,10 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/use # check these on https://fabricmc.net/use
# or better: https://modmuss50.me/fabric.html # or better: https://modmuss50.me/fabric.html
minecraft_version=21w07a minecraft_version=21w08a
yarn_mappings=21w07a+build.1 yarn_mappings=21w08a+build.1
loader_version=0.11.1 loader_version=0.11.2
fabric_version=0.30.5+1.17 fabric_version=0.31.1+1.17
# Mod Properties # Mod Properties
mod_version = 1.4.27 mod_version = 1.4.27
@@ -13,5 +13,5 @@ import net.minecraft.world.gen.feature.FeatureConfig;
public interface StructureFeatureInterface<C> public interface StructureFeatureInterface<C>
{ {
boolean plopAnywhere(ServerWorld world, BlockPos pos, ChunkGenerator generator, boolean wireOnly,Biome biome, FeatureConfig config); boolean plopAnywhere(ServerWorld world, BlockPos pos, ChunkGenerator generator, boolean wireOnly,Biome biome, FeatureConfig config);
boolean shouldStartPublicAt(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, ChunkRandom chunkRandom, int i, int j, Biome biome, ChunkPos chunkPos, C featureConfig, HeightLimitView heightLimitView); boolean shouldStartPublicAt(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, ChunkRandom chunkRandom, ChunkPos chpos, Biome biome, ChunkPos chunkPos, C featureConfig, HeightLimitView heightLimitView);
} }
@@ -158,12 +158,12 @@ public class FeatureGenerator
ChunkPos chunkPos2 = structure.getStartChunk(params, seed, chunkRandom, chunkPos.x, chunkPos.z); //find some chunk I guess ChunkPos chunkPos2 = structure.getStartChunk(params, seed, chunkRandom, chunkPos.x, chunkPos.z); //find some chunk I guess
// using here world for heightview, rather than chunk since we - unlike vanilla, want to avoid creating any chunks even on the // using here world for heightview, rather than chunk since we - unlike vanilla, want to avoid creating any chunks even on the
// structure starts level - lets see where would that take us. // structure starts level - lets see where would that take us.
if (chunkPos.x == chunkPos2.x && chunkPos.z == chunkPos2.z && ((StructureFeatureInterface)structure).shouldStartPublicAt(generator, generator.getBiomeSource(), seed, chunkRandom, chunkPos.x, chunkPos.z, biome, chunkPos, configuredFeature.config, world)) // should start at if (chunkPos.x == chunkPos2.x && chunkPos.z == chunkPos2.z && ((StructureFeatureInterface)structure).shouldStartPublicAt(generator, generator.getBiomeSource(), seed, chunkRandom, chunkPos, biome, chunkPos, configuredFeature.config, world)) // should start at
{ {
if (!computeBox) return StructureStart.DEFAULT; if (!computeBox) return StructureStart.DEFAULT;
StructureManager manager = world.getStructureManager(); StructureManager manager = world.getStructureManager();
StructureStart<T> structureStart3 = structure.getStructureStartFactory().create((StructureFeature<T>) configuredFeature.feature, chunkPos.x, chunkPos.z, BlockBox.empty(), 0, seed); StructureStart<T> structureStart3 = structure.getStructureStartFactory().create((StructureFeature<T>) configuredFeature.feature, chunkPos, BlockBox.empty(), 0, seed);
structureStart3.init(world.getRegistryManager(), generator, manager, chunkPos.x, chunkPos.z, biome, (T) configuredFeature.config, world); structureStart3.init(world.getRegistryManager(), generator, manager, chunkPos, biome, (T) configuredFeature.config, world);
if (!structureStart3.hasChildren()) return null; if (!structureStart3.hasChildren()) return null;
return structureStart3; return structureStart3;
} }
@@ -6,7 +6,9 @@ import carpet.logging.logHelpers.PacketCounter;
import carpet.mixins.PlayerListHeaderS2CPacketMixin; import carpet.mixins.PlayerListHeaderS2CPacketMixin;
import carpet.utils.Messenger; import carpet.utils.Messenger;
import carpet.utils.SpawnReporter; import carpet.utils.SpawnReporter;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.network.packet.s2c.play.PlayerListHeaderS2CPacket; import net.minecraft.network.packet.s2c.play.PlayerListHeaderS2CPacket;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@@ -53,9 +55,10 @@ public class HUDController
} }
public static void clear_player(PlayerEntity player) public static void clear_player(PlayerEntity player)
{ {
PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket(); PacketByteBuf packetData = new PacketByteBuf(Unpooled.buffer()).writeText(new LiteralText("")).writeText(new LiteralText(""));
((PlayerListHeaderS2CPacketMixin)packet).setHeader(new LiteralText("")); PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket(packetData);
((PlayerListHeaderS2CPacketMixin)packet).setFooter(new LiteralText("")); //((PlayerListHeaderS2CPacketMixin)packet).setHeader(new LiteralText(""));
//((PlayerListHeaderS2CPacketMixin)packet).setFooter(new LiteralText(""));
((ServerPlayerEntity)player).networkHandler.sendPacket(packet); ((ServerPlayerEntity)player).networkHandler.sendPacket(packet);
} }
@@ -99,9 +102,14 @@ public class HUDController
for (PlayerEntity player: player_huds.keySet()) for (PlayerEntity player: player_huds.keySet())
{ {
PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket(); PacketByteBuf packetData = new PacketByteBuf(Unpooled.buffer()).
((PlayerListHeaderS2CPacketMixin)packet).setHeader(new LiteralText("")); writeText(new LiteralText("")).
((PlayerListHeaderS2CPacketMixin)packet).setFooter(Messenger.c(player_huds.get(player).toArray(new Object[0]))); writeText(Messenger.c(player_huds.get(player).toArray(new Object[0])));
PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket(packetData);
//PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket();
//((PlayerListHeaderS2CPacketMixin)packet).setHeader(new LiteralText(""));
//((PlayerListHeaderS2CPacketMixin)packet).setFooter(Messenger.c(player_huds.get(player).toArray(new Object[0])));
((ServerPlayerEntity)player).networkHandler.sendPacket(packet); ((ServerPlayerEntity)player).networkHandler.sendPacket(packet);
} }
} }
@@ -8,14 +8,19 @@ import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.world.World; import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import static carpet.script.CarpetEventServer.Event.PLAYER_ATTACKS_ENTITY;
import static carpet.script.CarpetEventServer.Event.PLAYER_DEALS_DAMAGE; import static carpet.script.CarpetEventServer.Event.PLAYER_DEALS_DAMAGE;
import static carpet.script.CarpetEventServer.Event.PLAYER_INTERACTS_WITH_ENTITY;
import static carpet.script.CarpetEventServer.Event.PLAYER_TAKES_DAMAGE; import static carpet.script.CarpetEventServer.Event.PLAYER_TAKES_DAMAGE;
import static carpet.script.CarpetEventServer.Event.PLAYER_COLLIDES_WITH_ENTITY; import static carpet.script.CarpetEventServer.Event.PLAYER_COLLIDES_WITH_ENTITY;
@@ -53,4 +58,22 @@ public abstract class PlayerEntity_scarpetEventsMixin extends LivingEntity
PLAYER_COLLIDES_WITH_ENTITY.onEntityHandAction((ServerPlayerEntity)(Object)this, entity, null); PLAYER_COLLIDES_WITH_ENTITY.onEntityHandAction((ServerPlayerEntity)(Object)this, entity, null);
} }
} }
@Inject(method = "interact", at = @At("HEAD"))
private void doInteract(Entity entity, Hand hand, CallbackInfoReturnable<ActionResult> cir)
{
if (!world.isClient && PLAYER_INTERACTS_WITH_ENTITY.isNeeded())
{
PLAYER_INTERACTS_WITH_ENTITY.onEntityHandAction((ServerPlayerEntity) (Object)this, entity, hand);
}
}
@Inject(method = "attack", at = @At("HEAD"))
private void onAttack(Entity target, CallbackInfo ci)
{
if (!world.isClient && PLAYER_ATTACKS_ENTITY.isNeeded() && target.isAttackable())
{
PLAYER_ATTACKS_ENTITY.onEntityHandAction((ServerPlayerEntity) (Object)this, target, null);
}
}
} }
@@ -225,16 +225,16 @@ public class ServerPlayNetworkHandler_scarpetEventsMixin
PLAYER_DEPLOYS_ELYTRA.onPlayerEvent(player); PLAYER_DEPLOYS_ELYTRA.onPlayerEvent(player);
} }
@Inject(method = "onPlayerInteractEntity", at = @At( /*@Inject(method = "onPlayerInteractEntity", at = @At(
value = "INVOKE", value = "INVOKE",
target = "Lnet/minecraft/server/network/ServerPlayerEntity;interact(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;" target = "Lnet/minecraft/server/network/ServerPlayerEntity;interact(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;"
)) ))
private void onEntityInteract(PlayerInteractEntityC2SPacket playerInteractEntityC2SPacket_1, CallbackInfo ci) private void onEntityInteract(PlayerInteractEntityC2SPacket playerInteractEntityC2SPacket_1, CallbackInfo ci)
{ {
PLAYER_INTERACTS_WITH_ENTITY.onEntityHandAction(player, playerInteractEntityC2SPacket_1.getEntity(player.getServerWorld()), playerInteractEntityC2SPacket_1.getHand()); PLAYER_INTERACTS_WITH_ENTITY.onEntityHandAction(player, playerInteractEntityC2SPacket_1.getEntity(player.getServerWorld()), playerInteractEntityC2SPacket_1.getHand());
} }*/
@Inject(method = "onPlayerInteractEntity", at = @At( /*@Inject(method = "onPlayerInteractEntity", at = @At(
value = "INVOKE", value = "INVOKE",
target = "Lnet/minecraft/server/network/ServerPlayerEntity;attack(Lnet/minecraft/entity/Entity;)V" target = "Lnet/minecraft/server/network/ServerPlayerEntity;attack(Lnet/minecraft/entity/Entity;)V"
)) ))
@@ -242,7 +242,7 @@ public class ServerPlayNetworkHandler_scarpetEventsMixin
{ {
//todo add hit and hand in the future //todo add hit and hand in the future
PLAYER_ATTACKS_ENTITY.onEntityHandAction(player, playerInteractEntityC2SPacket_1.getEntity(player.getServerWorld()), null); PLAYER_ATTACKS_ENTITY.onEntityHandAction(player, playerInteractEntityC2SPacket_1.getEntity(player.getServerWorld()), null);
} }*/
@Inject(method = "onButtonClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;updateLastActionTime()V")) @Inject(method = "onButtonClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;updateLastActionTime()V"))
private void onItemBeingPickedFromInventory(ButtonClickC2SPacket packet, CallbackInfo ci) private void onItemBeingPickedFromInventory(ButtonClickC2SPacket packet, CallbackInfo ci)
@@ -29,7 +29,7 @@ public abstract class StructureFeatureMixin<C extends FeatureConfig> implements
@Shadow public abstract StructureFeature.StructureStartFactory getStructureStartFactory(); @Shadow public abstract StructureFeature.StructureStartFactory getStructureStartFactory();
@Shadow protected abstract boolean shouldStartAt(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, ChunkRandom random, int chunkX, int chunkZ, Biome biome, ChunkPos chunkPos, C config, HeightLimitView heightLimitView); @Shadow protected abstract boolean shouldStartAt(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, ChunkRandom random, ChunkPos chunkPos, Biome biome, ChunkPos chunkPos2, C featureConfig, HeightLimitView heightLimitView);
@Override @Override
public boolean plopAnywhere(ServerWorld world, BlockPos pos, ChunkGenerator generator, boolean wireOnly, Biome biome, FeatureConfig config) public boolean plopAnywhere(ServerWorld world, BlockPos pos, ChunkGenerator generator, boolean wireOnly, Biome biome, FeatureConfig config)
@@ -105,10 +105,10 @@ public abstract class StructureFeatureMixin<C extends FeatureConfig> implements
if (biome == null) if (biome == null)
biome_1 = generator.getBiomeSource().getBiomeForNoiseGen((chunkpos.getStartX() + 9) >> 2, 0, (chunkpos.getStartZ() + 9) >> 2 ); biome_1 = generator.getBiomeSource().getBiomeForNoiseGen((chunkpos.getStartX() + 9) >> 2, 0, (chunkpos.getStartZ() + 9) >> 2 );
StructureStart structurestart1 = getStructureStartFactory().create((StructureFeature)(Object)this, chunkpos.x, chunkpos.z, BlockBox.empty(),0,worldIn.getSeed()); StructureStart structurestart1 = getStructureStartFactory().create((StructureFeature)(Object)this, chunkpos, BlockBox.empty(),0,worldIn.getSeed());
if (config == null) if (config == null)
config = new DefaultFeatureConfig(); config = new DefaultFeatureConfig();
structurestart1.init(worldIn.getRegistryManager(), generator, worldIn.getStructureManager() , chunkpos.x, chunkpos.z, biome_1, config, ichunk); structurestart1.init(worldIn.getRegistryManager(), generator, worldIn.getStructureManager() , chunkpos, biome_1, config, ichunk);
structurestart = structurestart1.hasChildren() ? structurestart1 : StructureStart.DEFAULT; structurestart = structurestart1.hasChildren() ? structurestart1 : StructureStart.DEFAULT;
if (structurestart.hasChildren()) if (structurestart.hasChildren())
@@ -121,8 +121,8 @@ public abstract class StructureFeatureMixin<C extends FeatureConfig> implements
} }
@Override @Override
public boolean shouldStartPublicAt(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, ChunkRandom chunkRandom, int i, int j, Biome biome, ChunkPos chunkPos, C featureConfig, HeightLimitView heightLimitView) public boolean shouldStartPublicAt(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, ChunkRandom chunkRandom, ChunkPos chpos, Biome biome, ChunkPos chunkPos, C featureConfig, HeightLimitView heightLimitView)
{ {
return shouldStartAt(chunkGenerator, biomeSource, l, chunkRandom, i, j, biome, chunkPos, featureConfig, heightLimitView); return shouldStartAt(chunkGenerator, biomeSource, l, chunkRandom, chpos, biome, chunkPos, featureConfig, heightLimitView);
} }
} }
@@ -21,7 +21,7 @@ public class UpdateStructureBlockC2SPacketMixin {
private BlockPos size; private BlockPos size;
@Inject( @Inject(
method = "read", method = "<init>(Lnet/minecraft/network/PacketByteBuf;)V",
at = @At("TAIL") at = @At("TAIL")
) )
private void structureBlockLimitsRead(PacketByteBuf buf, CallbackInfo ci) { private void structureBlockLimitsRead(PacketByteBuf buf, CallbackInfo ci) {
@@ -75,7 +75,7 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
server.getPlayerManager().sendToDimension(new EntitySetHeadYawS2CPacket(playerShadow, (byte) (player.headYaw * 256 / 360)), playerShadow.world.getRegistryKey()); server.getPlayerManager().sendToDimension(new EntitySetHeadYawS2CPacket(playerShadow, (byte) (player.headYaw * 256 / 360)), playerShadow.world.getRegistryKey());
server.getPlayerManager().sendToAll(new PlayerListS2CPacket(PlayerListS2CPacket.Action.ADD_PLAYER, playerShadow)); server.getPlayerManager().sendToAll(new PlayerListS2CPacket(PlayerListS2CPacket.class_5893.field_29136, playerShadow));
player.getServerWorld().getChunkManager().updateCameraPosition(playerShadow); player.getServerWorld().getChunkManager().updateCameraPosition(playerShadow);
return playerShadow; return playerShadow;
} }
+36 -12
View File
@@ -36,6 +36,11 @@ import carpet.script.value.Value;
import carpet.script.value.ValueConversions; import carpet.script.value.ValueConversions;
import carpet.utils.Messenger; import carpet.utils.Messenger;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.class_5888;
import net.minecraft.class_5894;
import net.minecraft.class_5903;
import net.minecraft.class_5904;
import net.minecraft.class_5905;
import net.minecraft.command.DataCommandStorage; import net.minecraft.command.DataCommandStorage;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
@@ -47,9 +52,10 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtHelper; import net.minecraft.nbt.NbtHelper;
import net.minecraft.nbt.StringTag; import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import net.minecraft.network.Packet;
import net.minecraft.network.packet.s2c.play.PlaySoundIdS2CPacket; import net.minecraft.network.packet.s2c.play.PlaySoundIdS2CPacket;
import net.minecraft.network.packet.s2c.play.TitleS2CPacket; //import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
import net.minecraft.network.packet.s2c.play.TitleS2CPacket.Action; //import net.minecraft.network.packet.s2c.play.TitleS2CPacket.Action;
import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleEffect;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.command.ServerCommandSource;
@@ -85,6 +91,7 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -497,6 +504,7 @@ public class Auxiliary {
return (_c, _t) -> finalRes; // pass through for variables return (_c, _t) -> finalRes; // pass through for variables
}); });
expression.addLazyFunction("display_title", -1, (c, t, lv) -> { expression.addLazyFunction("display_title", -1, (c, t, lv) -> {
if (lv.size() < 2) throw new InternalExpressionException("'display_title' needs at least a target, type and message, and optionally times"); if (lv.size() < 2) throw new InternalExpressionException("'display_title' needs at least a target, type and message, and optionally times");
Value pVal = lv.get(0).evalValue(c); Value pVal = lv.get(0).evalValue(c);
if (!(pVal instanceof ListValue)) pVal = ListValue.of(pVal); if (!(pVal instanceof ListValue)) pVal = ListValue.of(pVal);
@@ -507,26 +515,40 @@ public class Auxiliary {
if (player == null) throw new InternalExpressionException("'display_title' requires a valid online player or a list of players as first argument. "+v.getString()+" is not a player."); if (player == null) throw new InternalExpressionException("'display_title' requires a valid online player or a list of players as first argument. "+v.getString()+" is not a player.");
return player; return player;
}); });
TitleS2CPacket.Action action; Function<Text, Packet<?>> packetGetter;
//TitleS2CPacket.Action action;
switch (lv.get(1).evalValue(c).getString().toLowerCase(Locale.ROOT)) switch (lv.get(1).evalValue(c).getString().toLowerCase(Locale.ROOT))
{ {
case "title": case "title":
action = Action.TITLE; packetGetter = (x) -> new class_5904(x);
//action = Action.TITLE;
if (lv.size() < 3)
throw new InternalExpressionException("Third argument of 'display_title' must be present except for 'clear' type");
break; break;
case "subtitle": case "subtitle":
action = Action.SUBTITLE; packetGetter = (x) -> new class_5903(x);
if (lv.size() < 3)
throw new InternalExpressionException("Third argument of 'display_title' must be present except for 'clear' type");
//action = Action.SUBTITLE;
break; break;
case "actionbar": case "actionbar":
action = Action.ACTIONBAR; packetGetter = (x) -> new class_5894(x);
if (lv.size() < 3)
throw new InternalExpressionException("Third argument of 'display_title' must be present except for 'clear' type");
//action = Action.ACTIONBAR;
break; break;
case "clear": case "clear":
action = Action.CLEAR; packetGetter = (x) -> new class_5888(true); // resetting default fade
//action = Action.CLEAR;
break; break;
default: default:
throw new InternalExpressionException("'display_title' requires 'title', 'subtitle', 'actionbar' or 'clear' as second argument"); throw new InternalExpressionException("'display_title' requires 'title', 'subtitle', 'actionbar' or 'clear' as second argument");
} }
if (action != Action.CLEAR && lv.size() < 3) //if (action != Action.CLEAR && lv.size() < 3)
throw new InternalExpressionException("Third argument of 'display_title' must be present except for 'clear' type"); // throw new InternalExpressionException("Third argument of 'display_title' must be present except for 'clear' type");
Text title = null; Text title = null;
if (lv.size() > 2) if (lv.size() > 2)
{ {
@@ -536,17 +558,19 @@ public class Auxiliary {
else else
title = new LiteralText(pVal.getString()); title = new LiteralText(pVal.getString());
} }
TitleS2CPacket timesPacket; class_5905 timesPacket; // TimesPacket
if (lv.size() > 3) if (lv.size() > 3)
{ {
int in = NumericValue.asNumber(lv.get(3).evalValue(c),"fade in for display_title" ).getInt(); int in = NumericValue.asNumber(lv.get(3).evalValue(c),"fade in for display_title" ).getInt();
int stay = NumericValue.asNumber(lv.get(4).evalValue(c),"stay for display_title" ).getInt(); int stay = NumericValue.asNumber(lv.get(4).evalValue(c),"stay for display_title" ).getInt();
int out = NumericValue.asNumber(lv.get(5).evalValue(c),"fade out for display_title" ).getInt(); int out = NumericValue.asNumber(lv.get(5).evalValue(c),"fade out for display_title" ).getInt();
timesPacket = new TitleS2CPacket(Action.TIMES, null, in, stay, out); timesPacket = new class_5905(in, stay, out);
//timesPacket = new TitleS2CPacket(Action.TIMES, null, in, stay, out);
} }
else timesPacket = null; else timesPacket = null;
TitleS2CPacket packet = new TitleS2CPacket(action, title); Packet<?> packet = packetGetter.apply(title);
//TitleS2CPacket packet = new TitleS2CPacket(action, title);
AtomicInteger total = new AtomicInteger(0); AtomicInteger total = new AtomicInteger(0);
targets.forEach(p -> { targets.forEach(p -> {
if (timesPacket != null) p.networkHandler.sendPacket(timesPacket); if (timesPacket != null) p.networkHandler.sendPacket(timesPacket);
@@ -1356,7 +1356,7 @@ public class WorldAccess {
return; return;
} }
StructureStart<?> start = structures.get(structure); StructureStart<?> start = structures.get(structure);
ChunkPos structureChunkPos = new ChunkPos(start.getChunkX(), start.getChunkZ()); ChunkPos structureChunkPos = start.method_34000(); // new ChunkPos(start.getChunkX(), start.getChunkZ());
BlockBox box = start.getBoundingBox(); BlockBox box = start.getBoundingBox();
for (int chx = box.minX / 16; chx <= box.maxX / 16; chx++) for (int chx = box.minX / 16; chx <= box.maxX / 16; chx++)
{ {
+2 -3
View File
@@ -4,10 +4,9 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Material; import net.minecraft.block.Material;
import net.minecraft.block.MapColor; import net.minecraft.block.MapColor;
import net.minecraft.class_5532; // TargetFinder
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason; import net.minecraft.entity.SpawnReason;
//import net.minecraft.entity.ai.TargetFinder; import net.minecraft.entity.ai.NoPenaltyTargeting;
import net.minecraft.entity.ai.goal.WanderAroundGoal; import net.minecraft.entity.ai.goal.WanderAroundGoal;
import net.minecraft.entity.ai.pathing.NavigationType; import net.minecraft.entity.ai.pathing.NavigationType;
import net.minecraft.entity.mob.PathAwareEntity; import net.minecraft.entity.mob.PathAwareEntity;
@@ -253,7 +252,7 @@ public class BlockInfo
for (int i=0; i<1000; i++) for (int i=0; i<1000; i++)
{ {
Vec3d vec = class_5532.method_31510(creature, 10, 7); // TargetFinder.findTarget(creature, 10, 7); Vec3d vec = NoPenaltyTargeting.find(creature, 10, 7); // TargetFinder.findTarget(creature, 10, 7);
if (vec == null) if (vec == null)
{ {
continue; continue;