This commit is contained in:
gnembon committed 2020-11-06 00:06:53 -04:00
1 parent 79dc85274d
commit 2cdea92da7
55 files changed
+453 -287

No files matched your search

@@ -58,7 +58,7 @@ public class PerimeterInfoCommand
if (!(baseEntity instanceof MobEntity))
{
Messenger.m(source, "r Failed to spawn test entity");
if (baseEntity != null) baseEntity.remove();
if (baseEntity != null) baseEntity.discard(); // discard //remove();
return 0;
}
entityliving = (MobEntity) baseEntity;
@@ -72,7 +72,7 @@ public class PerimeterInfoCommand
{
Messenger.m(source, "w ", entityliving.getDisplayName() ,"w : ","wb "+res.specific);
res.samples.forEach(bp -> Messenger.m(source, "w ", Messenger.tp("c", bp)));
entityliving.remove();
entityliving.discard(); // dicard // remove();
}
return 1;
}
@@ -209,9 +209,9 @@ public class PlayerCommand
private static int lookAt(CommandContext<ServerCommandSource> context)
{
return manipulate(context, ap -> {
try {
//try {
ap.lookAt(Vec3ArgumentType.getVec3(context, "position"));
} catch (CommandSyntaxException ignored) {}
//} catch (CommandSyntaxException ignored) {}
});
}
@@ -2,6 +2,7 @@ package carpet.fakes;
import com.mojang.datafixers.util.Either;
import net.minecraft.server.world.ChunkHolder;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.thread.ThreadExecutor;
import net.minecraft.world.chunk.Chunk;
@@ -10,5 +11,5 @@ import java.util.concurrent.CompletableFuture;
public interface ChunkHolderInterface
{
CompletableFuture<Either<Chunk, ChunkHolder.Unloaded>> setDefaultProtoChunk(ChunkPos chpos, ThreadExecutor<Runnable> executor);
CompletableFuture<Either<Chunk, ChunkHolder.Unloaded>> setDefaultProtoChunk(ChunkPos chpos, ThreadExecutor<Runnable> executor, ServerWorld world);
}
@@ -5,4 +5,6 @@ public interface ExperienceOrbInterface
int getCombineDelay();
void setCombineDelay(int what);
void setAmount(int what);
int getCount();
void setCount(int i);
}
@@ -48,8 +48,8 @@ import net.minecraft.world.World;
public class BlockRotator
{
public static boolean flipBlockWithCactus(BlockState state, World world, PlayerEntity player, Hand hand, BlockHitResult hit)
{
if (!player.abilities.allowModifyWorld || !CarpetSettings.flippinCactus || !player_holds_cactus_mainhand(player))
{ //getAbilities()
if (!player.method_31549().allowModifyWorld || !CarpetSettings.flippinCactus || !player_holds_cactus_mainhand(player))
{
return false;
}
@@ -248,7 +248,7 @@ public class EntityPlayerActionPack
private void dropItemFromSlot(int slot, boolean dropAll)
{
PlayerInventory inv = player.inventory;
PlayerInventory inv = player.method_31548(); // getInventory;
if (!inv.getStack(slot).isEmpty())
player.dropItem(inv.removeStack(slot,
dropAll ? inv.getStack(slot).getCount() : 1
@@ -257,7 +257,7 @@ public class EntityPlayerActionPack
public void drop(int selectedSlot, boolean dropAll)
{
PlayerInventory inv = player.inventory;
PlayerInventory inv = player.method_31548(); // getInventory;
if (selectedSlot == -2) // all
{
for (int i = inv.size(); i >= 0; i--)
@@ -172,7 +172,7 @@ public class OptimizedExplosion
PlayerEntity player = (PlayerEntity) entity;
if (!player.isSpectator()
&& (!player.isCreative() || !player.abilities.flying)) {
&& (!player.isCreative() || !player.method_31549().flying)) { //getAbilities
e.getAffectedPlayers().put(player, new Vec3d(d5 * d10, d7 * d10, d9 * d10));
}
}
@@ -227,7 +227,7 @@ public class OptimizedExplosion
{
if (block.shouldDropItemsOnExplosion(e) && world instanceof ServerWorld)
{
BlockEntity blockEntity = block.hasBlockEntity() ? world.getBlockEntity(blockpos) : null;
BlockEntity blockEntity = state.method_31709() ? world.getBlockEntity(blockpos) : null; //hasBlockEntity()
LootContext.Builder lootBuilder = (new LootContext.Builder((ServerWorld)eAccess.getWorld()))
.random(eAccess.getWorld().random)
+8 -5
View File
@@ -28,7 +28,7 @@ public class XPcombine
first == other || first.world.isClient || first.getServer().getTicks() == lastTickCombine
|| !first.isAlive() || !other.isAlive()
|| first.getExperienceAmount() > 15000 || other.getExperienceAmount() > 15000
|| first.pickupDelay == 32767 || other.pickupDelay == 32767
//|| first.pickupDelay == 32767 || other.pickupDelay == 32767
|| first.age == -32768 || other.age == -32768
|| ((ExperienceOrbInterface)first).getCombineDelay() != 0 || ((ExperienceOrbInterface)other).getCombineDelay() != 0
)
@@ -37,10 +37,13 @@ public class XPcombine
}
int size = getTextureByXP(first.getExperienceAmount());
((ExperienceOrbInterface) first).setAmount(first.getExperienceAmount() + other.getExperienceAmount());
((ExperienceOrbInterface) first).setCombineDelay(Math.max(first.pickupDelay, other.pickupDelay));
((ExperienceOrbInterface) first).setAmount(
first.getExperienceAmount()*((ExperienceOrbInterface) first).getCount() +
other.getExperienceAmount()*((ExperienceOrbInterface) other).getCount());
((ExperienceOrbInterface) first).setCount(1);
//((ExperienceOrbInterface) first).setCombineDelay(Math.max(first.pickupDelay, other.pickupDelay));
first.age = Math.min(first.age, other.age);
other.remove();
other.discard(); //discard
ExperienceOrbEntity newOrb;
@@ -51,7 +54,7 @@ public class XPcombine
((ExperienceOrbInterface)newOrb).setAmount(first.getExperienceAmount());
first.world.spawnEntity(newOrb);
first.remove();
first.discard(); // discard
}
else
{
@@ -0,0 +1,37 @@
package carpet.mixins;
import carpet.CarpetSettings;
import net.minecraft.block.AbstractCauldronBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.ShulkerBoxBlock;
import net.minecraft.class_5620;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(AbstractCauldronBlock.class)
public class AbstractCauldronBlock_stackableSBoxesMixin
{
@Redirect(method = "onUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/class_5620;interact(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/util/ActionResult;"))
private ActionResult wrapInteractor(class_5620 class_5620, BlockState blockState, World world, BlockPos blockPos, PlayerEntity playerEntity, Hand hand, ItemStack itemStack)
{
int count = -1;
if (CarpetSettings.stackableShulkerBoxes && itemStack.getItem() instanceof BlockItem && ((BlockItem)itemStack.getItem()).getBlock() instanceof ShulkerBoxBlock)
count = itemStack.getCount();
ActionResult result = class_5620.interact(blockState, world, blockPos, playerEntity, hand, itemStack);
if (count > 0 && result.isAccepted())
{
ItemStack current = playerEntity.getStackInHand(hand);
if (current.getItem() instanceof BlockItem && ((BlockItem)itemStack.getItem()).getBlock() instanceof ShulkerBoxBlock)
current.setCount(count);
}
return result;
}
}
@@ -41,13 +41,13 @@ public abstract class ArmorStandEntity_scarpetMarkerMixin extends LivingEntity
String hostName = StringUtils.removeStart(owner.get(),prefix);
if (!hostName.isEmpty() && CarpetServer.scriptServer.getHostByName(hostName) == null)
{
remove();
discard(); //discard
}
}
else
{
remove();
discard(); // discard
}
}
}
@@ -0,0 +1,13 @@
package carpet.mixins;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(BlockEntity.class)
public interface BlockEntity_movableBEMixin
{
@Accessor
void setPos(BlockPos pos);
}
@@ -24,7 +24,7 @@ public class BlockItem_creativeNoClipMixin
ItemPlacementContext contextOuter, BlockState stateOuter)
{
PlayerEntity player = contextOuter.getPlayer();
if (CarpetSettings.creativeNoClip && player != null && player.isCreative() && player.abilities.flying)
if (CarpetSettings.creativeNoClip && player != null && player.isCreative() && player.method_31549().flying)
{
// copy from canPlace
VoxelShape voxelShape = state.getCollisionShape(world, pos, context);
@@ -19,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(CauldronBlock.class)
public class CauldronBlock_stackableSBoxesMixin
{
{/*
@Inject(method = "onUse", locals = LocalCapture.CAPTURE_FAILHARD, at = @At(
value = "INVOKE",
target = "Lnet/minecraft/item/ItemStack;hasTag()Z",
@@ -30,5 +30,5 @@ public class CauldronBlock_stackableSBoxesMixin
{
if (CarpetSettings.stackableShulkerBoxes)
itemStack5.setCount(itemStack.getCount());
}
}*/
}
@@ -3,6 +3,7 @@ package carpet.mixins;
import carpet.fakes.ChunkHolderInterface;
import com.mojang.datafixers.util.Either;
import net.minecraft.server.world.ChunkHolder;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.thread.ThreadExecutor;
import net.minecraft.world.chunk.Chunk;
@@ -24,11 +25,11 @@ public abstract class ChunkHolder_scarpetChunkCreationMixin implements ChunkHold
@Shadow @Final private AtomicReferenceArray<CompletableFuture<Either<Chunk, ChunkHolder.Unloaded>>> futuresByStatus;
@Override
public CompletableFuture<Either<Chunk, ChunkHolder.Unloaded>> setDefaultProtoChunk(ChunkPos chpos, ThreadExecutor<Runnable> executor)
public CompletableFuture<Either<Chunk, ChunkHolder.Unloaded>> setDefaultProtoChunk(ChunkPos chpos, ThreadExecutor<Runnable> executor, ServerWorld world)
{
int i = ChunkStatus.EMPTY.getIndex();
CompletableFuture<Either<Chunk, ChunkHolder.Unloaded>> completableFuture2 = CompletableFuture.supplyAsync(
() -> Either.left(new ProtoChunk(chpos, UpgradeData.NO_UPGRADE_DATA)),
() -> Either.left(new ProtoChunk(chpos, UpgradeData.NO_UPGRADE_DATA, world)),
executor
);
combineSavingFuture(completableFuture2);
@@ -22,6 +22,7 @@ import java.util.Iterator;
@Mixin(ClientPlayNetworkHandler.class)
public class ClientPlayNetworkHandler_smoothClientAnimationsMixin
{
/*
@Shadow private ClientWorld world;
// fix as suggested by G4me4u
@Inject( method = "onChunkData", locals = LocalCapture.CAPTURE_FAILHARD, require = 0, at = @At(
@@ -48,5 +49,5 @@ public class ClientPlayNetworkHandler_smoothClientAnimationsMixin
}
}
}
}
}*/
}
@@ -7,6 +7,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.util.collection.DefaultedList;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -19,20 +20,21 @@ import java.util.List;
@Mixin(ScreenHandler.class)
public abstract class ContainerMixin
{
@Shadow @Final public List<Slot> slots;
@Shadow public abstract ItemStack onSlotClick(int int_1, int int_2, SlotActionType slotActionType_1, PlayerEntity playerEntity_1);
@Shadow public abstract void sendContentUpdates();
@Inject( method = "onSlotClick", at = @At(value = "HEAD"), cancellable = true)
@Shadow @Final public DefaultedList<Slot> slots;
@Inject( method = "method_30010", at = @At(value = "HEAD"), cancellable = true) // on slot click
private void onThrowClick( int slotId, int clickData, SlotActionType actionType, PlayerEntity playerEntity, CallbackInfoReturnable<ItemStack> cir)
{
if (actionType == SlotActionType.THROW && CarpetSettings.ctrlQCraftingFix && playerEntity.inventory.getCursorStack().isEmpty() && slotId >= 0)
if (actionType == SlotActionType.THROW && CarpetSettings.ctrlQCraftingFix && playerEntity.method_31548().getCursorStack().isEmpty() && slotId >= 0)
{
ItemStack itemStack_1 = ItemStack.EMPTY;
Slot slot_4 = slots.get(slotId);
if (slot_4 != null && slot_4.hasStack() && slot_4.canTakeItems(playerEntity))
if (/*slot_4 != null && */slot_4.hasStack() && slot_4.canTakeItems(playerEntity))
{
if(slotId == 0 && clickData == 1)
{
@@ -12,10 +12,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Entity.class)
public abstract class Entity_scarpetEventsMixin implements EntityInterface
{
@Shadow public boolean removed;
//@Shadow public boolean removed;
@Shadow protected int netherPortalTime;
@Shadow private int netherPortalCooldown;
@Shadow public abstract boolean isRemoved();
private boolean permanentVehicle;
private final EntityEventsGroup events = new EntityEventsGroup((Entity) (Object)this);
@@ -72,7 +75,7 @@ public abstract class Entity_scarpetEventsMixin implements EntityInterface
@Inject(method = "remove", at = @At("HEAD"))
private void onRemove(CallbackInfo ci)
{
if (!removed) events.onEvent(EntityEventsGroup.Event.ON_REMOVED);
if (!isRemoved()) events.onEvent(EntityEventsGroup.Event.ON_REMOVED); // ! isRemoved()
}
@@ -16,6 +16,8 @@ public abstract class ExperienceOrbEntityMixin implements ExperienceOrbInterface
{
@Shadow private int amount;
@Shadow private int field_27009;
public void setAmount(int amount) { this.amount = amount; }
public int combineDelay = 50;
@@ -45,6 +47,16 @@ public abstract class ExperienceOrbEntityMixin implements ExperienceOrbInterface
}
}
@Override
public int getCount() {
return field_27009;
}
@Override
public void setCount(int i) {
field_27009 = i;
}
@Inject(method = "onPlayerCollision", at = @At("HEAD"))
void removeDelay(PlayerEntity playerEntity_1, CallbackInfo ci)
{
@@ -33,9 +33,9 @@ public abstract class FallingBlockEntityMixin extends Entity
}
@Override
public void remove()
public void remove(Entity.RemovalReason arg) // reason
{
super.remove();
super.remove(arg);
if (LoggerRegistry.__fallingBlocks && logHelper != null)
logHelper.onFinish();
}
@@ -23,8 +23,8 @@ public abstract class GuardianEntityMixin extends HostileEntity
@Override
public void onStruckByLightning(ServerWorld serverWorld, LightningEntity lightningEntity)
{
if (!this.world.isClient && !this.removed && CarpetSettings.renewableSponges && !((Object)this instanceof ElderGuardianEntity))
{ // isRemoved()
if (!this.world.isClient && !this.isRemoved() && CarpetSettings.renewableSponges && !((Object)this instanceof ElderGuardianEntity))
{
ElderGuardianEntity elderGuardian = new ElderGuardianEntity(EntityType.ELDER_GUARDIAN ,this.world);
elderGuardian.refreshPositionAndAngles(this.getX(), this.getY(), this.getZ(), this.yaw, this.pitch);
@@ -38,7 +38,7 @@ public abstract class GuardianEntityMixin extends HostileEntity
}
this.world.spawnEntity(elderGuardian);
this.remove();
this.discard(); // discard remove();
}
else
{
@@ -1,13 +1,16 @@
package carpet.mixins;
import carpet.CarpetSettings;
import net.minecraft.block.BlockState;
import net.minecraft.block.HopperBlock;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.block.entity.HopperBlockEntity;
import net.minecraft.block.entity.LootableContainerBlockEntity;
import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DyeColor;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
@@ -17,41 +20,32 @@ import carpet.helpers.HopperCounter;
import carpet.utils.WoolTool;
@Mixin(HopperBlockEntity.class)
public abstract class HopperBlockEntityMixin extends LootableContainerBlockEntity {
protected HopperBlockEntityMixin(BlockEntityType<?> blockEntityType_1) {
super(blockEntityType_1);
public abstract class HopperBlockEntityMixin extends LootableContainerBlockEntity
{
protected HopperBlockEntityMixin(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
super(blockEntityType, blockPos, blockState);
}
@Shadow
public abstract double getHopperX();
@Shadow
public abstract double getHopperY();
@Shadow
public abstract double getHopperZ();
@Shadow public abstract int size();
@Shadow public abstract void setStack(int slot, ItemStack stack);
@Inject(method = "insert", at = @At("HEAD"), cancellable = true)
private void onInsert(CallbackInfoReturnable<Boolean> cir)
private static void onInsert(World world, BlockPos blockPos, BlockState blockState, Inventory inventory, CallbackInfoReturnable<Boolean> cir)
{
if (CarpetSettings.hopperCounters) {
DyeColor wool_color = WoolTool.getWoolColorAtPosition(
getWorld(),
new BlockPos(getHopperX(), getHopperY(), getHopperZ()).offset(this.getCachedState().get(HopperBlock.FACING)));
world,
blockPos.offset(blockState.get(HopperBlock.FACING)));
if (wool_color != null)
{
for (int i = 0; i < size(); ++i)
for (int i = 0; i < inventory.size(); ++i)
{
if (!this.getStack(i).isEmpty())
if (!inventory.getStack(i).isEmpty())
{
ItemStack itemstack = this.getStack(i);//.copy();
HopperCounter.COUNTERS.get(wool_color).add(this.getWorld().getServer(), itemstack);
this.setStack(i, ItemStack.EMPTY);
ItemStack itemstack = inventory.getStack(i);//.copy();
HopperCounter.COUNTERS.get(wool_color).add(world.getServer(), itemstack);
inventory.setStack(i, ItemStack.EMPTY);
}
}
cir.setReturnValue(true);
@@ -97,7 +97,7 @@ public abstract class ItemEntityMixin extends Entity implements ItemEntityInterf
otherStack.decrement(amount);
if (otherStack.isEmpty())
{
other.remove();
other.discard(); // discard remove();
}
else
{
@@ -30,7 +30,7 @@ public abstract class LivingEntity_creativeFlyMixin extends Entity
if (CarpetSettings.creativeFlyDrag != 0.09 && (Object)this instanceof PlayerEntity)
{
PlayerEntity self = (PlayerEntity)(Object)(this);
if (self.abilities.flying && ! onGround )
if (self.method_31549().flying && ! onGround )
return (float)(1.0-CarpetSettings.creativeFlyDrag);
}
return original;
@@ -43,7 +43,7 @@ public abstract class LivingEntity_creativeFlyMixin extends Entity
if (CarpetSettings.creativeFlySpeed != 1.0D && (Object)this instanceof PlayerEntity)
{
PlayerEntity self = (PlayerEntity)(Object)(this);
if (self.abilities.flying && !onGround)
if (self.method_31549().flying && !onGround)
cir.setReturnValue(flyingSpeed* (float)CarpetSettings.creativeFlySpeed);
}
}
@@ -4,6 +4,7 @@ import carpet.CarpetSettings;
import carpet.fakes.PistonBlockEntityInterface;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.PistonBlockEntity;
import net.minecraft.class_5614;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
@@ -16,11 +17,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(PistonBlockEntityRenderer.class)
public abstract class PistonBlockEntityRenderer_movableTEMixin extends BlockEntityRenderer<PistonBlockEntity>
public abstract class PistonBlockEntityRenderer_movableTEMixin implements BlockEntityRenderer<PistonBlockEntity>
{
public PistonBlockEntityRenderer_movableTEMixin(BlockEntityRenderDispatcher blockEntityRenderDispatcher_1)
BlockEntityRenderDispatcher dispatcher;
@Inject(method = "<init>", at = @At("TAIL"))
private void onInitCM(class_5614.class_5615 arg, CallbackInfo ci)
{
super(blockEntityRenderDispatcher_1);
dispatcher = arg.method_32139();
}
@Inject(method = "render", at = @At(value = "INVOKE",
@@ -41,14 +44,14 @@ public abstract class PistonBlockEntityRenderer_movableTEMixin extends BlockEnti
BlockEntity carriedBlockEntity = ((PistonBlockEntityInterface) pistonBlockEntity_1).getCarriedBlockEntity();
if (carriedBlockEntity != null)
{
carriedBlockEntity.setPos(pistonBlockEntity_1.getPos());
// maybe ??? carriedBlockEntity.setPos(pistonBlockEntity_1.getPos());
//((BlockEntityRenderDispatcherInterface) BlockEntityRenderDispatcher.INSTANCE).renderBlockEntityOffset(carriedBlockEntity, float_1, int_1, BlockRenderLayer.field_20799, bufferBuilder_1, pistonBlockEntity_1.getRenderOffsetX(float_1), pistonBlockEntity_1.getRenderOffsetY(float_1), pistonBlockEntity_1.getRenderOffsetZ(float_1));
matrixStack_1.translate(
pistonBlockEntity_1.getRenderOffsetX(partialTicks),
pistonBlockEntity_1.getRenderOffsetY(partialTicks),
pistonBlockEntity_1.getRenderOffsetZ(partialTicks)
);
BlockEntityRenderDispatcher.INSTANCE.render(carriedBlockEntity, partialTicks, matrixStack_1, layeredVertexConsumerStorage_1);
dispatcher.render(carriedBlockEntity, partialTicks, matrixStack_1, layeredVertexConsumerStorage_1);
}
}
@@ -32,13 +32,12 @@ public abstract class PistonBlockEntity_movableTEMixin extends BlockEntity imple
private BlockEntity carriedBlockEntity;
private boolean renderCarriedBlockEntity = false;
private boolean renderSet = false;
public PistonBlockEntity_movableTEMixin(BlockEntityType<?> blockEntityType_1)
{
super(blockEntityType_1);
public PistonBlockEntity_movableTEMixin(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
super(blockEntityType, blockPos, blockState);
}
/**
* @author 2No2Name
*/
@@ -46,12 +45,23 @@ public abstract class PistonBlockEntity_movableTEMixin extends BlockEntity imple
{
return carriedBlockEntity;
}
@Override
public void method_31662(World world) {
super.method_31662(world);
if (carriedBlockEntity != null) carriedBlockEntity.method_31662(world);
}
public void setCarriedBlockEntity(BlockEntity blockEntity)
{
this.carriedBlockEntity = blockEntity;
if (this.carriedBlockEntity != null)
this.carriedBlockEntity.setPos(this.pos);
{
((BlockEntity_movableBEMixin)carriedBlockEntity).setPos(pos);
// this might be little dangerous since pos is final for a hashing reason?
if (world != null) carriedBlockEntity.method_31662(world);
}
// this.carriedBlockEntity.setPos(this.pos);
}
public boolean isRenderModeSet()
@@ -73,14 +83,16 @@ public abstract class PistonBlockEntity_movableTEMixin extends BlockEntity imple
/**
* @author 2No2Name
*/
@Redirect(method = "tick", at = @At(value = "INVOKE",
@Redirect(method = "method_31707", at = @At(value = "INVOKE", // tick
target = "Lnet/minecraft/world/World;setBlockState(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;I)Z"))
private boolean movableTEsetBlockState0(World world, BlockPos blockPos_1, BlockState blockAState_2, int int_1)
private static boolean movableTEsetBlockState0(
World world, BlockPos blockPos_1, BlockState blockAState_2, int int_1,
World world2, BlockPos blockPos, BlockState blockState, PistonBlockEntity pistonBlockEntity)
{
if (!CarpetSettings.movableBlockEntities)
return world.setBlockState(blockPos_1, blockAState_2, int_1);
else
return ((WorldInterface) (world)).setBlockStateWithBlockEntity(blockPos_1, blockAState_2, this.carriedBlockEntity, int_1);
return ((WorldInterface) (world)).setBlockStateWithBlockEntity(blockPos_1, blockAState_2, ((PistonBlockEntityInterface)pistonBlockEntity).getCarriedBlockEntity(), int_1);
}
@Redirect(method = "finish", at = @At(value = "INVOKE",
@@ -116,14 +128,15 @@ public abstract class PistonBlockEntity_movableTEMixin extends BlockEntity imple
}
@Inject(method = "fromTag", at = @At(value = "TAIL"))
private void onFromTag(BlockState state, CompoundTag compoundTag_1, CallbackInfo ci)
private void onFromTag(CompoundTag compoundTag_1, CallbackInfo ci)
{
if (CarpetSettings.movableBlockEntities && compoundTag_1.contains("carriedTileEntityCM", 10))
{
if (this.pushedBlock.getBlock() instanceof BlockEntityProvider)
this.carriedBlockEntity = ((BlockEntityProvider) (this.pushedBlock.getBlock())).createBlockEntity(this.world);
this.carriedBlockEntity = ((BlockEntityProvider) (this.pushedBlock.getBlock())).createBlockEntity(pos, pushedBlock);// this.world);
if (carriedBlockEntity != null) //Can actually be null, as BlockPistonMoving.createNewTileEntity(...) returns null
this.carriedBlockEntity.fromTag(state, compoundTag_1.getCompound("carriedTileEntityCM"));
this.carriedBlockEntity.fromTag(compoundTag_1.getCompound("carriedTileEntityCM"));
setCarriedBlockEntity(carriedBlockEntity);
}
}
@@ -8,8 +8,10 @@ import net.minecraft.block.entity.PistonBlockEntity;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
@@ -27,13 +29,13 @@ public abstract class PistonBlockEntity_playerHandlingMixin
@Inject(method = "method_23672", at = @At("HEAD"), cancellable = true)
private static void dontPushSpectators(Direction direction, Entity entity, double d, Direction direction2, CallbackInfo ci)
{
if (CarpetSettings.creativeNoClip && entity instanceof PlayerEntity && (((PlayerEntity) entity).isCreative()) && ((PlayerEntity) entity).abilities.flying) ci.cancel();
if (CarpetSettings.creativeNoClip && entity instanceof PlayerEntity && (((PlayerEntity) entity).isCreative()) && ((PlayerEntity) entity).method_31549().flying) ci.cancel();
}
@Redirect(method = "pushEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;setVelocity(DDD)V"))
private void ignoreAccel(Entity entity, double x, double y, double z)
private static void ignoreAccel(Entity entity, double x, double y, double z)
{
if (CarpetSettings.creativeNoClip && entity instanceof PlayerEntity && (((PlayerEntity) entity).isCreative()) && ((PlayerEntity) entity).abilities.flying) return;
if (CarpetSettings.creativeNoClip && entity instanceof PlayerEntity && (((PlayerEntity) entity).isCreative()) && ((PlayerEntity) entity).method_31549().flying) return;
entity.setVelocity(x,y,z);
}
@@ -41,15 +43,16 @@ public abstract class PistonBlockEntity_playerHandlingMixin
value = "INVOKE",
target = "Lnet/minecraft/entity/Entity;getPistonBehavior()Lnet/minecraft/block/piston/PistonBehavior;"
))
private PistonBehavior moveFakePlayers(Entity entity)
private static PistonBehavior moveFakePlayers(Entity entity,
World world, BlockPos blockPos, float ff, PistonBlockEntity pistonBlockEntity)
{
if (entity instanceof EntityPlayerMPFake && pushedBlock.isOf(Blocks.SLIME_BLOCK))
if (entity instanceof EntityPlayerMPFake && pistonBlockEntity.getPushedBlock().isOf(Blocks.SLIME_BLOCK))
{
Vec3d vec3d = entity.getVelocity();
double e = vec3d.x;
double f = vec3d.y;
double g = vec3d.z;
Direction direction = getMovementDirection();
Direction direction = pistonBlockEntity.getMovementDirection();
switch(direction.getAxis()) {
case X:
e = (double)direction.getOffsetX();
@@ -51,16 +51,16 @@ public abstract class PistonBlock_movableTEMixin extends FacingBlock
block != Blocks.SPAWNER;
}
@Redirect(method = "isMovable", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;hasBlockEntity()Z")) // hasBLockENtity
private static boolean ifHasBlockEntity(Block block)
@Redirect(method = "isMovable", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;method_31709()Z")) // hasBLockENtity
private static boolean ifHasBlockEntity(BlockState blockState)
{
if (!block.hasBlockEntity())
if (!blockState.method_31709())
{
return false;
}
else
{
return !(CarpetSettings.movableBlockEntities && isPushableBlockEntity(block));
return !(CarpetSettings.movableBlockEntities && isPushableBlockEntity(blockState.getBlock()));
}
}
@@ -88,7 +88,7 @@ public abstract class PistonBlock_movableTEMixin extends FacingBlock
for (int i = 0; i < list_1.size(); ++i)
{
BlockPos blockpos = list_1.get(i);
BlockEntity blockEntity = (list_2.get(i).getBlock().hasBlockEntity()) ? world_1.getBlockEntity(blockpos) : null;
BlockEntity blockEntity = (list_2.get(i).method_31709()) ? world_1.getBlockEntity(blockpos) : null;
list1_BlockEntities.get().add(blockEntity);
if (blockEntity != null)
{
@@ -102,34 +102,32 @@ public abstract class PistonBlock_movableTEMixin extends FacingBlock
}
@Inject(method = "move", at = @At(value = "INVOKE", shift = At.Shift.BEFORE,
target = "Lnet/minecraft/world/World;setBlockEntity(Lnet/minecraft/util/math/BlockPos;" +
"Lnet/minecraft/block/entity/BlockEntity;)V", ordinal = 0),
target = "Lnet/minecraft/world/World;addBlockEntity(Lnet/minecraft/block/entity/BlockEntity;)V", ordinal = 0),
locals = LocalCapture.CAPTURE_FAILHARD)
private void setBlockEntityWithCarried(World world_1, BlockPos blockPos_1, Direction direction_1, boolean boolean_1,
CallbackInfoReturnable<Boolean> cir, BlockPos blockPos_2, PistonHandler pistonHandler_1, Map map_1, List list_1,
List list_2, List list_3, BlockState[] blockStates_1, Direction direction_2, int int_2,
int int_3, BlockPos blockPos_4, BlockState blockState_1)
int int_3, BlockPos blockPos_4, BlockState blockState9, BlockState blockState4)
{
BlockEntity blockEntityPiston = PistonExtensionBlock.createBlockEntityPiston((BlockState) list_2.get(int_3),
BlockEntity blockEntityPiston = PistonExtensionBlock.createBlockEntityPiston(blockPos_4, blockState4, (BlockState) list_2.get(int_3),
direction_1, boolean_1, false);
if (CarpetSettings.movableBlockEntities)
((PistonBlockEntityInterface) blockEntityPiston).setCarriedBlockEntity(list1_BlockEntities.get().get(int_3));
world_1.setBlockEntity(blockPos_4, blockEntityPiston);
world_1.addBlockEntity(blockEntityPiston);
//world_1.setBlockEntity(blockPos_4, blockEntityPiston);
}
@Redirect(method = "move", at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/World;setBlockEntity(Lnet/minecraft/util/math/BlockPos;" +
"Lnet/minecraft/block/entity/BlockEntity;)V",
target = "Lnet/minecraft/world/World;addBlockEntity(Lnet/minecraft/block/entity/BlockEntity;)V",
ordinal = 0))
private void dontDoAnything(World world, BlockPos blockPos_6, BlockEntity blockEntityPiston)
private void dontDoAnything(World world, BlockEntity blockEntity)
{
}
@Redirect(method = "move", at = @At(value = "INVOKE",
target = "Lnet/minecraft/block/PistonExtensionBlock;createBlockEntityPiston(Lnet/minecraft/block/BlockState;" +
"Lnet/minecraft/util/math/Direction;ZZ)Lnet/minecraft/block/entity/BlockEntity;",
target = "Lnet/minecraft/block/PistonExtensionBlock;createBlockEntityPiston(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Direction;ZZ)Lnet/minecraft/block/entity/BlockEntity;",
ordinal = 0))
private BlockEntity returnNull(BlockState blockState_1, Direction direction_1, boolean boolean_1, boolean boolean_2)
private BlockEntity returnNull(BlockPos blockPos, BlockState blockState, BlockState blockState2, Direction direction, boolean bl, boolean bl2)
{
return null;
}
@@ -39,21 +39,19 @@ public abstract class PistonHandler_customStickyMixin
@Shadow @Final private World world;
@Shadow @Final private Direction motionDirection;
@Shadow protected abstract boolean tryMove(BlockPos blockPos_1, Direction direction_1);
@Shadow private static boolean isBlockSticky(Block block_1) { return false; }
@Shadow private static boolean isAdjacentBlockStuck(Block block, Block block2) {return false;}
@Shadow private static boolean isBlockSticky(BlockState block_1) { return false; }
@Shadow private static boolean isAdjacentBlockStuck(BlockState block, BlockState block2) {return false;}
@Shadow protected abstract boolean canMoveAdjacentBlock(BlockPos pos);
// collects information about sticking block when backtracking.
private BlockPos currentPos;
private BlockState currentState;
private BlockState previousState;
@Redirect(method = "tryMove", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;", ordinal = 0))
private BlockState redirectGetBlockState_1_A(World world, BlockPos pos) {
return currentState = previousState = world.getBlockState(pos);
return currentState = world.getBlockState(pos);
}
@Redirect(method = "tryMove", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;", ordinal = 1))
private BlockState redirectGetBlockState_1_B(World world, BlockPos pos) {
previousState = currentState;
currentPos = pos;
return currentState = world.getBlockState(pos);
}
@@ -64,13 +62,13 @@ public abstract class PistonHandler_customStickyMixin
*/
@Redirect(method = "tryMove", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/piston/PistonHandler;isBlockSticky(Lnet/minecraft/block/Block;)Z",
target = "Lnet/minecraft/block/piston/PistonHandler;isBlockSticky(Lnet/minecraft/block/BlockState;)Z",
ordinal = 0 )
)
private boolean redirectIsStickyBlock(Block block_1)
private boolean redirectIsStickyBlock(BlockState blockState)
{
// applies to both MBE chests as well as sticky chains
return blockCanBePulled(currentState) || isBlockSticky(block_1);
return blockCanBePulled(blockState) || isBlockSticky(blockState);
}
/**
@@ -107,17 +105,17 @@ public abstract class PistonHandler_customStickyMixin
*/
@Redirect(method = "tryMove", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/piston/PistonHandler;isAdjacentBlockStuck(Lnet/minecraft/block/Block;Lnet/minecraft/block/Block;)Z")
target = "Lnet/minecraft/block/piston/PistonHandler;isAdjacentBlockStuck(Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;)Z")
)
private boolean isDraggingPreviousBlockBehind(Block previous, Block next)
private boolean isDraggingPreviousBlockBehind(BlockState previous, BlockState next)
{
if (CarpetSettings.doChainStone)
{
if (previousState.getBlock() == Blocks.CHAIN && isChainOnAxis(previousState, motionDirection))
if (previous.getBlock() == Blocks.CHAIN && isChainOnAxis(previous, motionDirection))
{
if ( (currentState.getBlock() == Blocks.CHAIN && isChainOnAxis(currentState, motionDirection))
if ( (next.getBlock() == Blocks.CHAIN && isChainOnAxis(next, motionDirection))
|| CarpetSettings.chainStoneStickToAll
|| isEndRodOnAxis(currentState, motionDirection.getAxis())
|| isEndRodOnAxis(next, motionDirection.getAxis())
|| Block.sideCoversSmallSquare(world, currentPos, motionDirection))
{
return true;
@@ -138,7 +136,7 @@ public abstract class PistonHandler_customStickyMixin
target = "Ljava/util/List;get(I)Ljava/lang/Object;",
shift = At.Shift.AFTER
))
private void stickToStickySide(BlockPos blockPos_1, Direction direction_1, CallbackInfoReturnable<Boolean> cir, BlockState blockState_1, Block block_1, int int_1, int int_2, int int_4, BlockPos blockPos_3, int int_5, int int_6)
private void stickToStickySide(BlockPos blockPos_1, Direction direction_1, CallbackInfoReturnable<Boolean> cir, BlockState blockState_1, int int_1, int int_2, int int_4, BlockPos blockPos_3, int int_5, int int_6)
{
if (CarpetSettings.movableBlockEntities)
{
@@ -208,13 +206,13 @@ public abstract class PistonHandler_customStickyMixin
*/
@Inject(method = "tryMove", locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true, at= @At(
value = "INVOKE",
target = "Lnet/minecraft/block/piston/PistonHandler;isBlockSticky(Lnet/minecraft/block/Block;)Z",
target = "Lnet/minecraft/block/piston/PistonHandler;isBlockSticky(Lnet/minecraft/block/BlockState;)Z",
ordinal = 1,
shift = At.Shift.BEFORE
)
)
private void redirectIsStickyBlock(BlockPos pos, Direction dir, CallbackInfoReturnable<Boolean> cir,
BlockState blockState, Block block, int i, int j, int l, BlockPos blockPos2, int m, int n, BlockPos blockPos3)
BlockState blockState, int i, int j, int l, BlockPos blockPos2, int m, int n, BlockPos blockPos3)
{
if (CarpetSettings.doChainStone)
{
@@ -232,7 +230,7 @@ public abstract class PistonHandler_customStickyMixin
*/
@Inject(method = "canMoveAdjacentBlock", locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true, at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/piston/PistonHandler;isAdjacentBlockStuck(Lnet/minecraft/block/Block;Lnet/minecraft/block/Block;)Z",
target = "Lnet/minecraft/block/piston/PistonHandler;isAdjacentBlockStuck(Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;)Z",
shift = At.Shift.BEFORE
))
private void otherSideStickyCases(BlockPos pos, CallbackInfoReturnable<Boolean> cir,
@@ -268,9 +266,9 @@ public abstract class PistonHandler_customStickyMixin
*/
@Redirect(method = "canMoveAdjacentBlock", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/piston/PistonHandler;isAdjacentBlockStuck(Lnet/minecraft/block/Block;Lnet/minecraft/block/Block;)Z")
target = "Lnet/minecraft/block/piston/PistonHandler;isAdjacentBlockStuck(Lnet/minecraft/block/BlockState;Lnet/minecraft/block/BlockState;)Z")
)
private boolean isStuckSlimeStone(Block block, Block block2)
private boolean isStuckSlimeStone(BlockState block, BlockState block2)
{
return isBlockSticky(block2) && isAdjacentBlockStuck(block, block2);
}
@@ -28,7 +28,7 @@ public abstract class PlayerEntity_creativeNoClipMixin extends LivingEntity
)
private boolean canClipTroughWorld(PlayerEntity playerEntity)
{
return playerEntity.isSpectator() || (CarpetSettings.creativeNoClip && playerEntity.isCreative() && playerEntity.abilities.flying);
return playerEntity.isSpectator() || (CarpetSettings.creativeNoClip && playerEntity.isCreative() && playerEntity.method_31549().flying);
}
@@ -38,7 +38,7 @@ public abstract class PlayerEntity_creativeNoClipMixin extends LivingEntity
)
private boolean collidesWithEntities(PlayerEntity playerEntity)
{
return playerEntity.isSpectator() || (CarpetSettings.creativeNoClip && playerEntity.isCreative() && playerEntity.abilities.flying);
return playerEntity.isSpectator() || (CarpetSettings.creativeNoClip && playerEntity.isCreative() && playerEntity.method_31549().flying);
}
@Redirect(method = "updateSize", at = @At(
@@ -47,6 +47,6 @@ public abstract class PlayerEntity_creativeNoClipMixin extends LivingEntity
)
private boolean spectatorsDontPose(PlayerEntity playerEntity)
{
return playerEntity.isSpectator() || (CarpetSettings.creativeNoClip && playerEntity.isCreative() && playerEntity.abilities.flying);
return playerEntity.isSpectator() || (CarpetSettings.creativeNoClip && playerEntity.isCreative() && playerEntity.method_31549().flying);
}
}
@@ -257,7 +257,7 @@ public class ServerPlayNetworkHandler_scarpetEventsMixin
{
if (PLAYER_SWITCHES_SLOT.isNeeded() && player.getServer() != null && player.getServer().isOnThread())
{
PLAYER_SWITCHES_SLOT.onSlotSwitch(player, player.inventory.selectedSlot, packet.getSelectedSlot());
PLAYER_SWITCHES_SLOT.onSlotSwitch(player, player.method_31548().selectedSlot, packet.getSelectedSlot());
}
}
}
@@ -14,8 +14,9 @@ import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(ServerWorld.class)
public abstract class ServerWorld_fakePlayersMixin
{
@Shadow /*@Nonnull*/ public abstract MinecraftServer getServer();
@Shadow /*@Nonnull*/ public abstract MinecraftServer getServer();
/*
@Shadow private boolean inEntityTick;
@Redirect( method = "removePlayer", at = @At(
@@ -24,7 +25,7 @@ public abstract class ServerWorld_fakePlayersMixin
))
private void crashRemovePlayer(ServerWorld serverWorld, Entity entity_1, ServerPlayerEntity serverPlayerEntity_1)
{
if ( !(inEntityTick && serverPlayerEntity_1 instanceof EntityPlayerMPFake) )
if ( !(serverPlayerEntity_1 instanceof EntityPlayerMPFake) )
serverWorld.removeEntity(entity_1);
else
getServer().send(new ServerTask(getServer().getTicks(), () ->
@@ -33,5 +34,5 @@ public abstract class ServerWorld_fakePlayersMixin
serverPlayerEntity_1.onTeleportationDone();
}));
}
}*/
}
@@ -2,6 +2,8 @@ package carpet.mixins;
import carpet.CarpetSettings;
import carpet.script.CarpetEventServer;
import net.minecraft.class_5568;
import net.minecraft.class_5579;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LightningEntity;
import net.minecraft.server.world.ServerWorld;
@@ -12,6 +14,7 @@ import net.minecraft.world.chunk.WorldChunk;
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.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@@ -34,24 +37,25 @@ public class ServerWorld_scarpetEventMixin
if (LIGHTNING.isNeeded()) LIGHTNING.onWorldEventFlag((ServerWorld) (Object)this, blockPos, bl2?1:0);
}
@Inject(method = "loadEntityUnchecked", at = @At(
@Redirect(method = "addEntity", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/world/ServerChunkManager;loadEntity(Lnet/minecraft/entity/Entity;)V"
target = "Lnet/minecraft/class_5579;method_31818(Lnet/minecraft/class_5568;)Z"
))
private void onEntityAddedToWorld(Entity entity, CallbackInfo ci)
private boolean onEntityAddedToWorld(class_5579 class_5579, class_5568 arg)
{
CarpetEventServer.Event event = ENTITY_LOAD.get(entity.getType());
if (event != null)
{
if (event.isNeeded())
{
event.onEntityAction(entity);
Entity entity = (Entity)arg;
boolean success = class_5579.method_31818(entity);
if (success) {
CarpetEventServer.Event event = ENTITY_LOAD.get(entity.getType());
if (event != null) {
if (event.isNeeded()) {
event.onEntityAction(entity);
}
} else {
CarpetSettings.LOG.error("Failed to handle entity " + entity.getType().getTranslationKey());
}
}
else
{
CarpetSettings.LOG.error("Failed to handle entity "+entity.getType().getTranslationKey());
}
};
return success;
}
}
@@ -117,8 +117,8 @@ public class SpawnHelperMixin
BlockState state = world.getBlockState(blockpos);
Block block = state.getBlock();
if (
block.isIn(BlockTags.FENCES) ||
block.isIn(BlockTags.WALLS) ||
state.isIn(BlockTags.FENCES) ||
state.isIn(BlockTags.WALLS) ||
((block instanceof FenceGateBlock) && !state.get(FenceGateBlock.OPEN))
)
{
@@ -335,8 +335,8 @@ public abstract class ThreadedAnvilChunkStorage_scarpetChunkCreationMixin implem
final long pos = cPos.toLong();
final ChunkHolder oldHolder = this.currentChunkHolders.remove(pos);
final ChunkHolder newHolder = new ChunkHolder(cPos, oldHolder.getLevel(), this.serverLightingProvider, this.chunkTaskPrioritySystem, (ChunkHolder.PlayersWatchingChunkProvider) this);
((ChunkHolderInterface) newHolder).setDefaultProtoChunk(cPos, this.mainThreadExecutor);
final ChunkHolder newHolder = new ChunkHolder(cPos, oldHolder.getLevel(), world, this.serverLightingProvider, this.chunkTaskPrioritySystem, (ChunkHolder.PlayersWatchingChunkProvider) this);
((ChunkHolderInterface) newHolder).setDefaultProtoChunk(cPos, this.mainThreadExecutor, world);
this.currentChunkHolders.put(pos, newHolder);
((ChunkTicketManagerInterface) this.ticketManager).replaceHolder(oldHolder, newHolder);
@@ -33,9 +33,9 @@ public abstract class ThrownEntityMixin extends Entity
}
@Override
public void remove()
public void remove(Entity.RemovalReason arg)
{
super.remove();
super.remove(arg);
if (LoggerRegistry.__projectiles && logHelper != null)
logHelper.onFinish();
}
@@ -93,14 +93,14 @@ public abstract class TntEntityMixin extends Entity implements TntEntityInterfac
if(!world.isClient && mergeBool && velocity.x == 0 && velocity.y == 0 && velocity.z == 0){
mergeBool = false;
for(Entity entity : world.getOtherEntities(this, this.getBoundingBox())){
if(entity instanceof TntEntity && !entity.removed){
if(entity instanceof TntEntity && !entity.isRemoved()){
TntEntity entityTNTPrimed = (TntEntity)entity;
Vec3d tntVelocity = entityTNTPrimed.getVelocity();
if(tntVelocity.x == 0 && tntVelocity.y == 0 && tntVelocity.z == 0
&& this.getX() == entityTNTPrimed.getX() && this.getZ() == entityTNTPrimed.getZ() && this.getY() == entityTNTPrimed.getY()
&& this.fuseTimer == entityTNTPrimed.getFuseTimer()){
mergedTNT += ((TntEntityInterface) entityTNTPrimed).getMergedTNT();
entityTNTPrimed.remove();
entityTNTPrimed.discard(); // discard remove();
}
}
}
@@ -0,0 +1,47 @@
package carpet.mixins;
import carpet.helpers.TickSpeed;
import carpet.utils.CarpetProfiler;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.class_5558;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Final;
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.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(targets = "net.minecraft.world.chunk.WorldChunk$class_5563")
public class WorldChunkBEList_tickMixin<T extends BlockEntity>
{
@Shadow @Final private T field_27224;
CarpetProfiler.ProfilerToken entitySection;
@Inject(method = "method_31703", at = @At("HEAD"))
private void startTileEntitySection(CallbackInfo ci)
{
entitySection = CarpetProfiler.start_block_entity_section(field_27224.getWorld(), field_27224, CarpetProfiler.TYPE.TILEENTITY);
}
@Redirect(method = "method_31703", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/class_5558;tick(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/block/entity/BlockEntity;)V"
))
private void checkProcessTEs(class_5558 class_5558, World world, BlockPos blockPos, BlockState blockState, T blockEntity)
{
//return class_5562.method_31704() || !TickSpeed.process_entities; // blockEntity can be NULL? happened once with fake player
if (TickSpeed.process_entities) class_5558.tick(world, blockPos, blockState, blockEntity);
}
@Inject(method = "method_31703", at = @At("RETURN"))
private void endTileEntitySection(CallbackInfo ci)
{
CarpetProfiler.end_current_entity_section(entitySection);
}
}
@@ -8,6 +8,7 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.PistonExtensionBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkSectionPos;
import net.minecraft.world.Heightmap;
import net.minecraft.world.World;
import net.minecraft.world.chunk.ChunkSection;
@@ -40,10 +41,13 @@ public abstract class WorldChunk_movableTEMixin implements WorldChunkInterface
@Shadow
/* @Nullable */
public abstract BlockEntity getBlockEntity(BlockPos blockPos_1, WorldChunk.CreationType worldChunk$CreationType_1);
@Shadow protected abstract <T extends BlockEntity> void method_31723(T blockEntity);
// Fix Failure: If a moving BlockEntity is placed while BlockEntities are ticking, this will not find it and then replace it with a new TileEntity!
// blockEntity_2 = this.getBlockEntity(blockPos_1, WorldChunk.CreationType.CHECK);
@Redirect(method = "setBlockState", at = @At(value = "INVOKE", ordinal = 1,
// question is - with the changes in the BE handling this might not be a case anymore
@Redirect(method = "setBlockState", at = @At(value = "INVOKE", ordinal = 0,
target = "Lnet/minecraft/world/chunk/WorldChunk;getBlockEntity(Lnet/minecraft/util/math/BlockPos;" + "Lnet/minecraft/world/chunk/WorldChunk$CreationType;)" + "Lnet/minecraft/block/entity/BlockEntity;"))
private BlockEntity ifGetBlockEntity(WorldChunk worldChunk, BlockPos blockPos_1,
WorldChunk.CreationType worldChunk$CreationType_1)
@@ -72,7 +76,8 @@ public abstract class WorldChunk_movableTEMixin implements WorldChunkInterface
int x = blockPos_1.getX() & 15;
int y = blockPos_1.getY();
int z = blockPos_1.getZ() & 15;
ChunkSection chunkSection = this.sections[y >> 4];
int section = world.method_31602(y);
ChunkSection chunkSection = this.sections[section];
if (chunkSection == EMPTY_SECTION)
{
if (newBlockState.isAir())
@@ -80,8 +85,8 @@ public abstract class WorldChunk_movableTEMixin implements WorldChunkInterface
return null;
}
chunkSection = new ChunkSection(y >> 4 << 4);
this.sections[y >> 4] = chunkSection;
chunkSection = new ChunkSection(ChunkSectionPos.getSectionCoord(y));
this.sections[section] = chunkSection;
}
boolean boolean_2 = chunkSection.isEmpty();
@@ -121,29 +126,31 @@ public abstract class WorldChunk_movableTEMixin implements WorldChunkInterface
else
{
BlockEntity oldBlockEntity = null;
if (oldBlock instanceof BlockEntityProvider)
if (oldBlockState.method_31709()) // is BE Provider
{
oldBlockEntity = this.getBlockEntity(blockPos_1, WorldChunk.CreationType.CHECK);
if (oldBlockEntity != null)
{
oldBlockEntity.resetBlock();
oldBlockEntity.method_31664(oldBlockState);
method_31723(oldBlockEntity);
}
}
if (newBlock instanceof BlockEntityProvider)
if (oldBlockState.method_31709()) // is BE Provider
{
if (newBlockEntity == null)
{
newBlockEntity = ((BlockEntityProvider) newBlock).createBlockEntity(this.world);
newBlockEntity = ((BlockEntityProvider) newBlock).createBlockEntity(blockPos_1, newBlockState);
}
if (newBlockEntity != oldBlockEntity && newBlockEntity != null)
{
newBlockEntity.cancelRemoval();
this.world.setBlockEntity(blockPos_1, newBlockEntity);
newBlockEntity.resetBlock();
this.world.addBlockEntity(newBlockEntity);
newBlockEntity.method_31664(newBlockState);
method_31723(newBlockEntity);
}
}
if (!this.world.isClient)
{
newBlockState.onBlockAdded(this.world, blockPos_1, oldBlockState, boolean_1); //This can call setblockstate! (e.g. hopper does)
@@ -60,76 +60,63 @@ public abstract class World_movableTEMixin implements WorldInterface, WorldAcces
*/
public boolean setBlockStateWithBlockEntity(BlockPos blockPos_1, BlockState blockState_1, BlockEntity newBlockEntity, int int_1)
{
if ((Object) this instanceof EmptyChunk)
return false;
if (World.isHeightInvalid(blockPos_1))
{
return false;
}
else if (!this.isClient && isDebugWorld())
if (method_31606(blockPos_1) || !this.isClient && isDebugWorld()) return false;
WorldChunk worldChunk_1 = this.getWorldChunk(blockPos_1);
Block block_1 = blockState_1.getBlock();
BlockState blockState_2;
if (newBlockEntity != null && block_1 instanceof BlockEntityProvider)
blockState_2 = ((WorldChunkInterface) worldChunk_1).setBlockStateWithBlockEntity(blockPos_1, blockState_1, newBlockEntity, (int_1 & 64) != 0);
else
blockState_2 = worldChunk_1.setBlockState(blockPos_1, blockState_1, (int_1 & 64) != 0);
if (blockState_2 == null)
{
return false;
}
else
{
WorldChunk worldChunk_1 = this.getWorldChunk(blockPos_1);
Block block_1 = blockState_1.getBlock();
BlockState blockState_2;
if (newBlockEntity != null && block_1 instanceof BlockEntityProvider)
blockState_2 = ((WorldChunkInterface) worldChunk_1).setBlockStateWithBlockEntity(blockPos_1, blockState_1, newBlockEntity, (int_1 & 64) != 0);
else
blockState_2 = worldChunk_1.setBlockState(blockPos_1, blockState_1, (int_1 & 64) != 0);
if (blockState_2 == null)
BlockState blockState_3 = this.getBlockState(blockPos_1);
if (blockState_3 != blockState_2 && (blockState_3.getOpacity((BlockView) this, blockPos_1) != blockState_2.getOpacity((BlockView) this, blockPos_1) || blockState_3.getLuminance() != blockState_2.getLuminance() || blockState_3.hasSidedTransparency() || blockState_2.hasSidedTransparency()))
{
return false;
Profiler profiler = getProfiler();
profiler.push("queueCheckLight");
this.getChunkManager().getLightingProvider().checkBlock(blockPos_1);
profiler.pop();
}
else
if (blockState_3 == blockState_1)
{
BlockState blockState_3 = this.getBlockState(blockPos_1);
if (blockState_3 != blockState_2 && (blockState_3.getOpacity((BlockView) this, blockPos_1) != blockState_2.getOpacity((BlockView) this, blockPos_1) || blockState_3.getLuminance() != blockState_2.getLuminance() || blockState_3.hasSidedTransparency() || blockState_2.hasSidedTransparency()))
if (blockState_2 != blockState_3)
{
Profiler profiler = getProfiler();
profiler.push("queueCheckLight");
this.getChunkManager().getLightingProvider().checkBlock(blockPos_1);
profiler.pop();
this.scheduleBlockRerenderIfNeeded(blockPos_1, blockState_2, blockState_3);
}
if (blockState_3 == blockState_1)
if ((int_1 & 2) != 0 && (!this.isClient || (int_1 & 4) == 0) && (this.isClient || worldChunk_1.getLevelType() != null && worldChunk_1.getLevelType().isAfter(ChunkHolder.LevelType.TICKING)))
{
if (blockState_2 != blockState_3)
{
this.scheduleBlockRerenderIfNeeded(blockPos_1, blockState_2, blockState_3);
}
if ((int_1 & 2) != 0 && (!this.isClient || (int_1 & 4) == 0) && (this.isClient || worldChunk_1.getLevelType() != null && worldChunk_1.getLevelType().isAfter(ChunkHolder.LevelType.TICKING)))
{
this.updateListeners(blockPos_1, blockState_2, blockState_1, int_1);
}
if (!this.isClient && (int_1 & 1) != 0)
{
this.updateNeighborsAlways(blockPos_1, blockState_2.getBlock());
if (blockState_1.hasComparatorOutput())
{
updateComparators(blockPos_1, block_1);
}
}
if ((int_1 & 16) == 0)
{
int int_2 = int_1 & -34;
blockState_2.prepare(this, blockPos_1, int_2); // prepare
blockState_1.updateNeighbors(this, blockPos_1, int_2); // updateNeighbours
blockState_1.prepare(this, blockPos_1, int_2); // prepare
}
this.onBlockChanged(blockPos_1, blockState_2, blockState_3);
this.updateListeners(blockPos_1, blockState_2, blockState_1, int_1);
}
return true;
if (!this.isClient && (int_1 & 1) != 0)
{
this.updateNeighborsAlways(blockPos_1, blockState_2.getBlock());
if (blockState_1.hasComparatorOutput())
{
updateComparators(blockPos_1, block_1);
}
}
if ((int_1 & 16) == 0)
{
int int_2 = int_1 & -34;
blockState_2.prepare(this, blockPos_1, int_2); // prepare
blockState_1.updateNeighbors(this, blockPos_1, int_2); // updateNeighbours
blockState_1.prepare(this, blockPos_1, int_2); // prepare
}
this.onBlockChanged(blockPos_1, blockState_2, blockState_3);
}
return true;
}
}
}
@@ -43,39 +43,39 @@ public abstract class World_tickMixin implements WorldInterface
private void endBlockEntities(CallbackInfo ci) {
CarpetProfiler.end_current_section(currentSection);
}
/*
@Inject(method = "tickBlockEntities", locals = LocalCapture.CAPTURE_FAILHARD, at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/entity/BlockEntity;isRemoved()Z",
target = "Lnet/minecraft/class_5562;method_31704()Z",
shift = At.Shift.BEFORE,
ordinal = 0
))
private void startTileEntitySection(CallbackInfo ci, Profiler profiler_1, Iterator i, BlockEntity blockEntity_2)
private void startTileEntitySection(CallbackInfo ci, Profiler profiler_1, Iterator i, class_5562 lv)
{
entitySection = CarpetProfiler.start_block_entity_section((World)(Object)this, blockEntity_2, CarpetProfiler.TYPE.TILEENTITY);
entitySection = CarpetProfiler.start_block_entity_section((World)(Object)this, (BlockEntity) lv, CarpetProfiler.TYPE.TILEENTITY);
}
@Redirect(method = "tickBlockEntities", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/entity/BlockEntity;isRemoved()Z",
target = "Lnet/minecraft/class_5562;method_31704()Z",
ordinal = 0
))
private boolean checkProcessTEs(BlockEntity blockEntity)
)) // isRemoved()
private boolean checkProcessTEs(class_5562 class_5562)
{
return blockEntity.isRemoved() || !TickSpeed.process_entities; // blockEntity can be NULL? happened once with fake player
return class_5562.method_31704() || !TickSpeed.process_entities; // blockEntity can be NULL? happened once with fake player
}
@Inject(method = "tickBlockEntities", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/block/entity/BlockEntity;isRemoved()Z",
shift = At.Shift.BEFORE,
ordinal = 1
target = "Lnet/minecraft/class_5562;method_31703()V",
shift = At.Shift.AFTER,
ordinal = 0
))
private void endTileEntitySection(CallbackInfo ci)
{
CarpetProfiler.end_current_entity_section(entitySection);
}
*/
@Inject(method = "tickEntity", at = @At("HEAD"), cancellable = true)
private void startEntity(Consumer<Entity> consumer_1, Entity e, CallbackInfo ci)
{
@@ -46,7 +46,7 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
server.getPlayerManager().onPlayerConnect(new NetworkManagerFake(NetworkSide.SERVERBOUND), instance);
instance.teleport(worldIn, d0, d1, d2, (float)yaw, (float)pitch);
instance.setHealth(20.0F);
instance.removed = false;
instance.unsetRemoved();
instance.stepHeight = 0.6F;
interactionManagerIn.setGameMode(gamemode);
server.getPlayerManager().sendToDimension(new EntitySetHeadYawS2CPacket(instance, (byte) (instance.headYaw * 256 / 360)), dimensionId);//instance.dimension);
@@ -102,7 +102,7 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
{
this.networkHandler.syncWithPlayerPosition();
this.getServerWorld().getChunkManager().updateCameraPosition(this);
//if (netherPortalCooldown==10) onTeleportationDone(); <- causes hard crash but would need to be done to enable portals
onTeleportationDone(); //<- causes hard crash but would need to be done to enable portals // not as of 1.17
}
super.tick();
this.playerTick();
@@ -438,7 +438,7 @@ public class CarpetScriptHost extends ScriptHost
{
for (Entity e : world.getEntitiesByType(EntityType.ARMOR_STAND, (as) -> as.getScoreboardTags().contains(markerName)))
{
e.remove();
e.discard();
}
}
if (this.saveTimeout > 0)
@@ -369,7 +369,7 @@ public class Auxiliary {
for (Entity e : cc.s.getWorld().getEntitiesByType(EntityType.ARMOR_STAND, (as) -> as.getScoreboardTags().contains(markerName)))
{
total ++;
e.remove();
e.discard(); // discard // remove();
}
int finalTotal = total;
return (_cc, _tt) -> new NumericValue(finalTotal);
@@ -184,7 +184,7 @@ public class Entities {
{
String who = lv.get(0).evalValue(c).getString();
EntityValue.EntityClassDescriptor eDesc = EntityValue.getEntityDescriptor(who);
List<Entity> entityList = ((CarpetContext)c).s.getWorld().getEntitiesByType(eDesc.directType, eDesc.filteringPredicate);
List<? extends Entity> entityList = ((CarpetContext)c).s.getWorld().getEntitiesByType(eDesc.directType, eDesc.filteringPredicate);
Value retval = ListValue.wrap(entityList.stream().map(EntityValue::new).collect(Collectors.toList()));
return (_c, _t ) -> retval;
});
@@ -752,7 +752,7 @@ public class WorldAccess {
destTag.putInt("x", targetPos.getX());
destTag.putInt("y", targetPos.getY());
destTag.putInt("z", targetPos.getZ());
be.fromTag(finalSourceBlockState, destTag);
be.fromTag(destTag);
be.markDirty();
}
}
@@ -9,6 +9,7 @@ import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.util.math.AffineTransformation;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.client.render.VertexFormats;
@@ -441,7 +442,7 @@ public class ShapesRenderer
// some raw shit
public static void drawLine(Tessellator tessellator, BufferBuilder builder, float x1, float y1, float z1, float x2, float y2, float z2, float red1, float grn1, float blu1, float alpha) {
builder.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR); // 3
builder.begin(VertexFormat.class_5596.field_27377, VertexFormats.POSITION_COLOR); // 3 // GL LINES
builder.vertex(x1, y1, z1).color(red1, grn1, blu1, alpha).next();
builder.vertex(x2, y2, z2).color(red1, grn1, blu1, alpha).next();
tessellator.draw();
@@ -454,7 +455,7 @@ public class ShapesRenderer
boolean xthick, boolean ythick, boolean zthick,
float red1, float grn1, float blu1, float alpha, float red2, float grn2, float blu2)
{
builder.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR); // 3
builder.begin(VertexFormat.class_5596.field_27377, VertexFormats.POSITION_COLOR); // 3 /lines
if (xthick)
{
builder.vertex(x1, y1, z1).color(red1, grn2, blu2, alpha).next();
@@ -507,7 +508,7 @@ public class ShapesRenderer
boolean xthick, boolean ythick, boolean zthick,
float red1, float grn1, float blu1, float alpha)
{
builder.begin(GL11.GL_QUADS, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27382, VertexFormats.POSITION_COLOR); // QUADS
if (xthick && ythick)
{
@@ -582,8 +583,8 @@ public class ShapesRenderer
for (int dh = 0; dh < hsteps; dh++)
{
float hh = dh*hstep;
builder.begin(GL11.GL_LINE_LOOP, VertexFormats.POSITION_COLOR);
for (int i = 0; i <= num_steps360; i++)
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); // line loop to line strip
for (int i = 0; i <= num_steps360+1; i++)
{
float theta = step * i;
float x = r * MathHelper.cos(theta);
@@ -598,7 +599,7 @@ public class ShapesRenderer
{
for (int i = 0; i <= num_steps180; i++)
{
builder.begin(GL11.GL_LINE_LOOP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); // line loop to line strip
float theta = step * i;
float x = r * MathHelper.cos(theta);
@@ -608,12 +609,13 @@ public class ShapesRenderer
builder.vertex(cx + x, cy + 0, cz - z).color(red, grn, blu, alpha).next();
builder.vertex(cx + x, cy + h, cz - z).color(red, grn, blu, alpha).next();
builder.vertex(cx - x, cy + h, cz + z).color(red, grn, blu, alpha).next();
builder.vertex(cx - x, cy + 0, cz + z).color(red, grn, blu, alpha).next();
tessellator.draw();
}
}
else
{
builder.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27377, VertexFormats.POSITION_COLOR); //lines
for (int i = 0; i <= num_steps180; i++)
{
float theta = step * i;
@@ -631,7 +633,7 @@ public class ShapesRenderer
for (int dh = 0; dh < hsteps; dh++)
{
float hh = dh * hstep;
builder.begin(GL11.GL_LINE_LOOP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); // line loop to line strip
for (int i = 0; i <= num_steps360; i++)
{
float theta = step * i;
@@ -647,7 +649,7 @@ public class ShapesRenderer
{
for (int i = 0; i <= num_steps180; i++)
{
builder.begin(GL11.GL_LINE_LOOP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); // line loop to line strip
float theta = step * i;
float y = r * MathHelper.cos(theta);
@@ -662,7 +664,7 @@ public class ShapesRenderer
}
else
{
builder.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27377, VertexFormats.POSITION_COLOR); //lines
for (int i = 0; i <= num_steps180; i++)
{
float theta = step * i;
@@ -679,7 +681,7 @@ public class ShapesRenderer
for (int dh = 0; dh < hsteps; dh++)
{
float hh = dh * hstep;
builder.begin(GL11.GL_LINE_LOOP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); // line loop to line strip
for (int i = 0; i <= num_steps360; i++)
{
float theta = step * i;
@@ -694,7 +696,7 @@ public class ShapesRenderer
{
for (int i = 0; i <= num_steps180; i++)
{
builder.begin(GL11.GL_LINE_LOOP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); // line loop to line strip
float theta = step * i;
float x = r * MathHelper.cos(theta);
@@ -709,7 +711,7 @@ public class ShapesRenderer
}
else
{
builder.begin(GL11.GL_LINES, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27377, VertexFormats.POSITION_COLOR); //lines
for (int i = 0; i <= num_steps180; i++)
{
float theta = step * i;
@@ -736,7 +738,7 @@ public class ShapesRenderer
if (axis == Direction.Axis.Y)
{
builder.begin(GL11.GL_TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27381, VertexFormats.POSITION_COLOR); //triangle fan
builder.vertex(cx, cy, cz).color(red, grn, blu, alpha).next();
for (int i = 0; i <= num_steps360; i++)
{
@@ -748,7 +750,7 @@ public class ShapesRenderer
tessellator.draw();
if (!isFlat)
{
builder.begin(GL11.GL_TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27381, VertexFormats.POSITION_COLOR); //trifan
builder.vertex(cx, cy+h, cz).color(red, grn, blu, alpha).next();
for (int i = 0; i <= num_steps360; i++)
{
@@ -759,14 +761,20 @@ public class ShapesRenderer
}
tessellator.draw();
builder.begin(GL11.GL_QUAD_STRIP, VertexFormats.POSITION_COLOR);
for (int i = 0; i <= num_steps360; i++)
builder.begin(VertexFormat.class_5596.field_27382, VertexFormats.POSITION_COLOR); // quad strip to quads
float xp = r * 1;
float zp = r * 0;
for (int i = 1; i <= num_steps360; i++)
{
float theta = step * i;
float x = r * MathHelper.cos(theta);
float z = r * MathHelper.sin(theta);
builder.vertex(cx + x, cy + 0, cz + z).color(red, grn, blu, alpha).next();
builder.vertex(cx + xp, cy + 0, cz + zp).color(red, grn, blu, alpha).next();
builder.vertex(cx + xp, cy + h, cz + zp).color(red, grn, blu, alpha).next();
builder.vertex(cx + x, cy + h, cz + z).color(red, grn, blu, alpha).next();
builder.vertex(cx + x, cy + 0, cz + z).color(red, grn, blu, alpha).next();
xp = x;
zp = z;
}
tessellator.draw();
}
@@ -774,7 +782,7 @@ public class ShapesRenderer
}
else if (axis == Direction.Axis.X)
{
builder.begin(GL11.GL_TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27381, VertexFormats.POSITION_COLOR); //trifan
builder.vertex(cx, cy, cz).color(red, grn, blu, alpha).next();
for (int i = 0; i <= num_steps360; i++)
{
@@ -786,7 +794,7 @@ public class ShapesRenderer
tessellator.draw();
if (!isFlat)
{
builder.begin(GL11.GL_TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27381, VertexFormats.POSITION_COLOR); //trifan
builder.vertex(cx+h, cy, cz).color(red, grn, blu, alpha).next();
for (int i = 0; i <= num_steps360; i++)
{
@@ -797,21 +805,27 @@ public class ShapesRenderer
}
tessellator.draw();
builder.begin(GL11.GL_QUAD_STRIP, VertexFormats.POSITION_COLOR);
for (int i = 0; i <= num_steps360; i++)
builder.begin(VertexFormat.class_5596.field_27382, VertexFormats.POSITION_COLOR); // quad strip to quads
float yp = r * 1;
float zp = r * 0;
for (int i = 1; i <= num_steps360; i++)
{
float theta = step * i;
float y = r * MathHelper.cos(theta);
float z = r * MathHelper.sin(theta);
builder.vertex(cx + 0, cy + y, cz + z).color(red, grn, blu, alpha).next();
builder.vertex(cx + 0, cy + yp, cz + zp).color(red, grn, blu, alpha).next();
builder.vertex(cx + h, cy + yp, cz + zp).color(red, grn, blu, alpha).next();
builder.vertex(cx + h, cy + y, cz + z).color(red, grn, blu, alpha).next();
builder.vertex(cx + 0, cy + y, cz + z).color(red, grn, blu, alpha).next();
yp = y;
zp = z;
}
tessellator.draw();
}
}
else if (axis == Direction.Axis.Z)
{
builder.begin(GL11.GL_TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27381, VertexFormats.POSITION_COLOR); //trifan
builder.vertex(cx, cy, cz).color(red, grn, blu, alpha).next();
for (int i = 0; i <= num_steps360; i++)
{
@@ -823,7 +837,7 @@ public class ShapesRenderer
tessellator.draw();
if (!isFlat)
{
builder.begin(GL11.GL_TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27381, VertexFormats.POSITION_COLOR); //trifan
builder.vertex(cx, cy, cz+h).color(red, grn, blu, alpha).next();
for (int i = 0; i <= num_steps360; i++)
{
@@ -834,14 +848,20 @@ public class ShapesRenderer
}
tessellator.draw();
builder.begin(GL11.GL_QUAD_STRIP, VertexFormats.POSITION_COLOR);
for (int i = 0; i <= num_steps360; i++)
builder.begin(VertexFormat.class_5596.field_27382, VertexFormats.POSITION_COLOR); // quad strip to quads
float xp = r;
float yp = 0;
for (int i = 1; i <= num_steps360; i++)
{
float theta = step * i;
float x = r * MathHelper.cos(theta);
float y = r * MathHelper.sin(theta);
builder.vertex(cx + x, cy + y, cz + 0).color(red, grn, blu, alpha).next();
builder.vertex(cx + xp, cy + yp, cz + 0).color(red, grn, blu, alpha).next();
builder.vertex(cx + xp, cy + yp, cz + h).color(red, grn, blu, alpha).next();
builder.vertex(cx + x, cy + y, cz + h).color(red, grn, blu, alpha).next();
builder.vertex(cx + x, cy + y, cz + 0).color(red, grn, blu, alpha).next();
xp = x;
yp = y;
}
tessellator.draw();
}
@@ -855,10 +875,10 @@ public class ShapesRenderer
{
float step = (float)Math.PI / (subd/2);
int num_steps180 = (int)(Math.PI / step)+1;
int num_steps360 = (int)(2*Math.PI / step);
int num_steps360 = (int)(2*Math.PI / step)+1;
for (int i = 0; i <= num_steps360; i++)
{
builder.begin(GL11.GL_LINE_STRIP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); //linestrip
float theta = step * i ;
for (int j = 0; j <= num_steps180; j++)
{
@@ -872,7 +892,7 @@ public class ShapesRenderer
}
for (int j = 0; j <= num_steps180; j++)
{
builder.begin(GL11.GL_LINE_LOOP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27378, VertexFormats.POSITION_COLOR); // line loop to line strip
float phi = step * j ;
for (int i = 0; i <= num_steps360; i++)
@@ -901,7 +921,12 @@ public class ShapesRenderer
{
float theta = i * step;
float thetaprime = theta+step;
builder.begin(GL11.GL_QUAD_STRIP, VertexFormats.POSITION_COLOR);
builder.begin(VertexFormat.class_5596.field_27382, VertexFormats.POSITION_COLOR); // quad strip to quads
float xb = 0;
float zb = 0;
float xbp = 0;
float zbp = 0;
float yp = r;
for (int j = 0; j <= num_steps180; j++)
{
float phi = j * step;
@@ -910,8 +935,15 @@ public class ShapesRenderer
float y = r * MathHelper.cos(phi);
float xp = r * MathHelper.sin(phi) * MathHelper.cos(thetaprime);
float zp = r * MathHelper.sin(phi) * MathHelper.sin(thetaprime);
builder.vertex(x + cx, y + cy, z + cz).color(red, grn, blu, alpha).next();
builder.vertex(xb + cx, yp + cy, zb + cz).color(red, grn, blu, alpha).next();
builder.vertex(xbp + cx, yp + cy, zbp + cz).color(red, grn, blu, alpha).next();
builder.vertex(xp + cx, y + cy, zp + cz).color(red, grn, blu, alpha).next();
builder.vertex(x + cx, y + cy, z + cz).color(red, grn, blu, alpha).next();
xb = x;
zb = z;
xbp = xp;
zbp = zp;
yp = y;
}
tessellator.draw();
}
@@ -142,7 +142,7 @@ public class WorldTools
List<ServerPlayerEntity> nearbyPlayers = world.getPlayers(p -> pos.getSquaredDistance(p.getX(), pos.getY(), p.getZ(), true) < vvd);
if (!nearbyPlayers.isEmpty())
{
ChunkDataS2CPacket packet = new ChunkDataS2CPacket(worldChunk, 65535);
ChunkDataS2CPacket packet = new ChunkDataS2CPacket(worldChunk);
ChunkPos chpos = new ChunkPos(pos);
nearbyPlayers.forEach(p -> p.networkHandler.sendPacket(packet));
}
@@ -346,7 +346,7 @@ public class EntityValue extends Value
private static final Map<String, BiFunction<Entity, Value, Value>> featureAccessors = new HashMap<String, BiFunction<Entity, Value, Value>>() {{
//put("test", (e, a) -> a == null ? Value.NULL : new StringValue(a.getString()));
put("removed", (entity, arg) -> new NumericValue(entity.removed));
put("removed", (entity, arg) -> new NumericValue(entity.isRemoved()));
put("uuid",(e, a) -> new StringValue(e.getUuidAsString()));
put("id",(e, a) -> new NumericValue(e.getEntityId()));
put("pos", (e, a) -> ListValue.of(new NumericValue(e.getX()), new NumericValue(e.getY()), new NumericValue(e.getZ())));
@@ -620,7 +620,7 @@ public class EntityValue extends Value
put("selected_slot", (e, a) -> {
if (e instanceof PlayerEntity)
return new NumericValue(((PlayerEntity) e).inventory.selectedSlot);
return new NumericValue(((PlayerEntity) e).method_31548().selectedSlot); //getInventory
return Value.NULL;
});
@@ -796,7 +796,7 @@ public class EntityValue extends Value
}
private static final Map<String, BiConsumer<Entity, Value>> featureModifiers = new HashMap<String, BiConsumer<Entity, Value>>() {{
put("remove", (entity, value) -> entity.remove());
put("remove", (entity, value) -> entity.discard()); // using discard here - will see other options if valid
put("age", (e, v) -> e.age = Math.abs((int)NumericValue.asNumber(v).getLong()) );
put("health", (e, v) -> {
float health = (float) NumericValue.asNumber(v).getDouble();
@@ -145,7 +145,7 @@ public class NBTSerializableValue extends Value implements ContainerValueInterfa
Block block = blockState.getBlock();
if (block instanceof InventoryProvider) {
inventory = ((InventoryProvider)block).getInventory(blockState, world, blockPos);
} else if (block.hasBlockEntity()) {
} else if (blockState.method_31709()) { //hasBlockEntity()
BlockEntity blockEntity = BlockValue.getBlockEntity(world, blockPos);
if (blockEntity instanceof Inventory) {
inventory = (Inventory)blockEntity;
@@ -181,7 +181,7 @@ public class NBTSerializableValue extends Value implements ContainerValueInterfa
if (v1 instanceof EntityValue)
{
Entity e = ((EntityValue) v1).getEntity();
if (e instanceof PlayerEntity) inv = ((PlayerEntity) e).inventory;
if (e instanceof PlayerEntity) inv = ((PlayerEntity) e).method_31548();
else if (e instanceof Inventory) inv = (Inventory) e;
else if (e instanceof VillagerEntity) inv = ((VillagerEntity) e).getInventory();
@@ -231,7 +231,7 @@ public class NBTSerializableValue extends Value implements ContainerValueInterfa
return new InventoryLocator(
player,
player.getBlockPos(),
isEnder ? player.getEnderChestInventory() : player.inventory,
isEnder ? player.getEnderChestInventory() : player.method_31548(),
offset + 1,
isEnder
);
+4 -3
View File
@@ -4,9 +4,10 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Material;
import net.minecraft.block.MaterialColor;
import net.minecraft.class_5532; // TargetFinder
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.ai.TargetFinder;
//import net.minecraft.entity.ai.TargetFinder;
import net.minecraft.entity.ai.goal.WanderAroundGoal;
import net.minecraft.entity.ai.pathing.NavigationType;
import net.minecraft.entity.mob.PathAwareEntity;
@@ -231,7 +232,7 @@ public class BlockInfo
for (int i=0; i<1000; i++)
{
Vec3d vec = TargetFinder.findTarget(creature, 10, 7);
Vec3d vec = class_5532.method_31510(creature, 10, 7); // TargetFinder.findTarget(creature, 10, 7);
if (vec == null)
{
continue;
@@ -251,7 +252,7 @@ public class BlockInfo
}
total_ticks += 3*i;
}
creature.remove();
creature.discard(); // discarded // remove(Entity.RemovalReason.field_26999); // 2nd option - DISCARDED
long total_time = (total_ticks)/1000/20;
return Messenger.s(String.format(" - Wander chance above: %.1f%%\n - Average standby above: %s",
(100.0F*success)/1000,
+1 -1
View File
@@ -39,7 +39,7 @@ public class MobAI
return currentTrackers.contains(type);
}
public static void clearTracking(EntityType etype)
public static void clearTracking(EntityType<? extends Entity> etype)
{
aiTrackers.remove(etype);
for(ServerWorld world : CarpetServer.minecraft_server.getWorlds() )
@@ -398,23 +398,23 @@ public class SpawnReporter
{
if (entity.hasVehicle())
{
entity.getVehicle().remove();
entity.getVehicle().discard();
}
if (entity.hasPassengers())
{
for (Entity e: entity.getPassengerList())
{
e.remove();
e.discard();
}
}
if (entity instanceof OcelotEntity)
{
for (Entity e: entity.getEntityWorld().getOtherEntities(entity, entity.getBoundingBox()))
{
e.remove();
e.discard();
}
}
entity.remove();
entity.discard();
}
// yeeted from SpawnHelper - temporary fix
+3
View File
@@ -28,6 +28,7 @@
"MinecraftServer_tickspeedMixin",
"World_tickMixin",
"ServerWorld_tickMixin",
"WorldChunkBEList_tickMixin",
"ServerChunkManager_tickMixin",
"ThreadedAnvilChunkStorage_tickMixin",
"ChunkTicketManager_tickMixin",
@@ -122,6 +123,7 @@
"ContainerMixin",
"ClientConnectionMixin",
"CauldronBlock_stackableSBoxesMixin",
"AbstractCauldronBlock_stackableSBoxesMixin",
"ItemEntityMixin",
"TntBlockMixin",
"ExplosionMixin",
@@ -175,6 +177,7 @@
"Ingredient_scarpetMixin",
"BlockStateArgument_scarpetMixin",
"BlockEntity_movableBEMixin",
"PistonBlock_movableTEMixin",
"PistonBlockEntity_movableTEMixin",
"World_movableTEMixin",
+1 -1
View File
@@ -31,7 +31,7 @@
"accessWidener" : "carpet.accesswidener",
"depends": {
"minecraft": "1.16.x",
"minecraft": "1.17.x",
"fabricloader": ">=0.7.1"
},
"suggests": {