Skip to content

Commit 35cdffd

Browse files
committed
Merge branch 'master' into release
2 parents 76f19be + 55701c2 commit 35cdffd

File tree

17 files changed

+172
-178
lines changed

17 files changed

+172
-178
lines changed

.github/workflows/dotnet.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ jobs:
3838
file: src/MiNET/MiNET.Console/minet.zip
3939
asset_name: MiNET.zip
4040
tag: ${{ github.ref }}
41-
release_name: MiNET-CobwebSMP 1.13.0.14 (1.21.20)
41+
release_name: MiNET-CobwebSMP 1.13.0.16 (1.21.20)
4242
body: ${{ github.event.head_commit.message }}

src/MiNET/MiNET.Console/minet.zip

272 Bytes
Binary file not shown.

src/MiNET/MiNET.Console/server.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ GameRule.NaturalRegeneration=true
7272
GameRule.TntExplodes=true
7373

7474
#Should block drop item after breaking? true - yes, false - no.
75-
DoTiledrops=true
75+
GameRule.DoTiledrops=true
7676

7777
#Should mobs drop loot after killing?
7878
DoMobloot=true

src/MiNET/MiNET/Entities/Projectiles/Projectile.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
using MiNET.Blocks;
3131
using MiNET.Net;
3232
using MiNET.Particles;
33-
using MiNET.Utils;
3433
using MiNET.Utils.Metadata;
3534
using MiNET.Utils.Vectors;
3635
using MiNET.Worlds;
@@ -117,7 +116,7 @@ public override void OnTick(Entity[] entities)
117116

118117
bool collided = false;
119118
Block collidedWithBlock = null;
120-
if (entityCollided != null)
119+
if (entityCollided != null && Damage >= 0)
121120
{
122121
double speed = Math.Sqrt(Velocity.X * Velocity.X + Velocity.Y * Velocity.Y + Velocity.Z * Velocity.Z);
123122
double damage = Math.Ceiling(speed * Damage);
@@ -146,10 +145,14 @@ public override void OnTick(Entity[] entities)
146145

147146
entityCollided.HealthManager.TakeHit(this, (int) damage, DamageCause.Projectile);
148147
entityCollided.HealthManager.LastDamageSource = Shooter;
149-
150148
OnHitEntity(entityCollided);
151149
DespawnEntity();
152150
return;
151+
}else if (entityCollided != null && Damage == -1)
152+
{
153+
entityCollided.HealthManager.LastDamageSource = Shooter;
154+
OnHitEntity(entityCollided);
155+
DespawnEntity();
153156
}
154157
else
155158
{
@@ -221,12 +224,15 @@ protected virtual void OnHitEntity(Entity entityCollided)
221224

222225
private Entity CheckEntityCollide(Vector3 position, Vector3 direction)
223226
{
224-
Ray2 ray = new Ray2 {x = position, d = Vector3.Normalize(direction)};
227+
float Distance = 2.0f;
228+
229+
Vector3 offsetPosition = position + Vector3.Normalize(direction) * Distance;
230+
231+
Ray2 ray = new Ray2 { x = offsetPosition, d = Vector3.Normalize(direction) };
225232

226233
var entities = Level.Entities.Values.Concat(Level.GetSpawnedPlayers()).OrderBy(entity => Vector3.Distance(position, entity.KnownPosition.ToVector3()));
227234
foreach (Entity entity in entities)
228235
{
229-
if (entity == Shooter) continue;
230236
if (entity == this) continue;
231237
if (entity is Projectile) continue; // This should actually be handled for some projectiles
232238
if (entity is Player player && player.GameMode == GameMode.Spectator) continue;

src/MiNET/MiNET/ItemStackInventoryManager.cs

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ public ItemStackInventoryManager(Player player)
4747
public virtual List<StackResponseContainerInfo> HandleItemStackActions(int requestId, ItemStackActionList actions)
4848
{
4949
var stackResponses = new List<StackResponseContainerInfo>();
50-
uint recipeNetworkId = 0;
50+
byte TimesCrafted = 1;
5151
foreach (ItemStackAction stackAction in actions)
5252
{
5353
switch (stackAction)
5454
{
5555
case CraftAction craftAction:
5656
{
57-
recipeNetworkId = ProcessCraftAction(craftAction);
57+
TimesCrafted = ProcessCraftAction(craftAction);
5858
break;
5959
}
6060
case CraftAutoAction CraftAuto:
@@ -80,7 +80,7 @@ public virtual List<StackResponseContainerInfo> HandleItemStackActions(int reque
8080
}
8181
case CraftResultDeprecatedAction craftResultDeprecatedAction:
8282
{
83-
ProcessCraftResultDeprecatedAction(craftResultDeprecatedAction);
83+
ProcessCraftResultDeprecatedAction(craftResultDeprecatedAction, TimesCrafted);
8484
break;
8585
}
8686
case TakeAction takeAction:
@@ -405,26 +405,37 @@ protected virtual void ProcessTakeAction(TakeAction action, List<StackResponseCo
405405
{
406406
byte count = action.Count;
407407
Item sourceItem;
408+
Item destinationItem;
408409
Item destItem;
409410
StackRequestSlotInfo source = action.Source;
410411
StackRequestSlotInfo destination = action.Destination;
411412

412413
sourceItem = GetContainerItem(source.ContainerId, source.Slot);
413-
Log.Debug($"Take {sourceItem}");
414+
destinationItem = GetContainerItem(destination.ContainerId, destination.Slot);
414415

415-
if (sourceItem.Count == count || sourceItem.Count - count <= 0)
416+
417+
if (source.ContainerId == 60 && sourceItem.Id == destinationItem.Id)
416418
{
417-
destItem = sourceItem;
419+
destItem = (Item) destinationItem.Clone();
420+
destItem.Count += count;
421+
destItem.UniqueId = Environment.TickCount;
422+
}
423+
else if (source.ContainerId != 60 && sourceItem.Count == count)
424+
{
425+
destItem = (Item) sourceItem.Clone();
426+
destItem.Count = (byte)(destinationItem.Count + count);
427+
destItem.UniqueId = Environment.TickCount;
418428
sourceItem = new ItemAir();
419429
sourceItem.UniqueId = 0;
420430
SetContainerItem(source.ContainerId, source.Slot, sourceItem);
421431
}
422432
else
423433
{
424434
destItem = (Item) sourceItem.Clone();
425-
sourceItem.Count -= count;
426435
destItem.Count = count;
427436
destItem.UniqueId = Environment.TickCount;
437+
sourceItem.Count -= count;
438+
SetContainerItem(source.ContainerId, source.Slot, sourceItem);
428439
}
429440

430441
SetContainerItem(destination.ContainerId, destination.Slot, destItem);
@@ -469,15 +480,12 @@ protected virtual void ProcessTakeAction(TakeAction action, List<StackResponseCo
469480
});
470481
}
471482

472-
protected virtual void ProcessCraftResultDeprecatedAction(CraftResultDeprecatedAction action)
483+
protected virtual void ProcessCraftResultDeprecatedAction(CraftResultDeprecatedAction action, byte TimesCrafted)
473484
{
474-
//BUG: Won't work proper with anvil anymore.
475485
if (GetContainerItem(59, 50).UniqueId > 0) return;
476-
477-
//TODO: We only use this for anvils right now. Until we fixed the anvil merge ourselves.
478486
Item craftingResult = action.ResultItems.FirstOrDefault();
479487
if (craftingResult == null) return;
480-
488+
craftingResult.Count = (byte)(craftingResult.Count * TimesCrafted);
481489
craftingResult.UniqueId = Environment.TickCount;
482490
SetContainerItem(59, 50, craftingResult);
483491
}
@@ -486,14 +494,20 @@ protected virtual void ProcessCraftNotImplementedDeprecatedAction(CraftNotImplem
486494
{
487495
}
488496

489-
protected virtual uint ProcessCraftAction(CraftAction action)
497+
protected virtual byte ProcessCraftAction(CraftAction action)
490498
{
491-
return action.RecipeNetworkId;
499+
return action.TimesCrafted;
500+
/*RecipeManager.resultMap.TryGetValue((int) action.RecipeNetworkId, out Item item);
501+
Item craftedItem = ItemFactory.GetItem(item.Id, item.Metadata, item.Count);
502+
craftedItem.Count = (byte) ((item.Count + GetContainerItem(59, 0).Count) * action.TimesCrafted);
503+
Log.Error(GetContainerItem(59, 0).Id);
504+
Log.Error(GetContainerItem(59, 0).Count);
505+
SetContainerItem(59, 0, craftedItem);*/
492506
}
493507
protected virtual void ProcessCraftAuto(CraftAutoAction action)
494508
{
495509
RecipeManager.resultMap.TryGetValue((int)action.RecipeNetworkId, out Item item);
496-
_player.Inventory.UiInventory.Slots[50] = ItemFactory.GetItem(item.Id, item.Metadata, item.Count * action.craftCount);
510+
_player.Inventory.UiInventory.Slots[50] = ItemFactory.GetItem(item.Id, item.Metadata, item.Count * action.TimesCrafted);
497511
}
498512

499513
protected virtual void ProcessCraftCreativeAction(CraftCreativeAction action)

src/MiNET/MiNET/MiNET.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
44
<PackageId>MiNET-CobwebSMP</PackageId>
5-
<Version>1.13.0.14</Version>
5+
<Version>1.13.0.16</Version>
66
<Authors>gurun</Authors>
77
<Company>Niclas Olofsson</Company>
88
<Description>MiNET - a Minecraft PocketEdition Server</Description>

src/MiNET/MiNET/Net/MCPE Protocol.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4368,6 +4368,7 @@ public enum LinkActions
43684368
public long riderId; // = null;
43694369
public byte linkType; // = null;
43704370
public byte unknown; // = null;
4371+
public float vehicleAngularVelocity; // = null;
43714372

43724373
public McpeSetEntityLink()
43734374
{
@@ -4386,6 +4387,7 @@ protected override void EncodePacket()
43864387
Write(linkType);
43874388
Write(unknown);
43884389
Write(false);
4390+
Write(vehicleAngularVelocity);
43894391

43904392
AfterEncode();
43914393
}
@@ -4403,6 +4405,7 @@ protected override void DecodePacket()
44034405
riderId = ReadSignedVarLong();
44044406
linkType = ReadByte();
44054407
unknown = ReadByte();
4408+
vehicleAngularVelocity = ReadFloat();
44064409

44074410
AfterDecode();
44084411
}
@@ -4418,6 +4421,7 @@ protected override void ResetPacket()
44184421
riderId=default(long);
44194422
linkType=default(byte);
44204423
unknown=default(byte);
4424+
vehicleAngularVelocity=default(float);
44214425
}
44224426

44234427
}
@@ -5533,6 +5537,7 @@ protected override void EncodePacket()
55335537
WriteSignedVarInt(dimension);
55345538
Write(position);
55355539
Write(respawn);
5540+
Write(false);
55365541

55375542
AfterEncode();
55385543
}
@@ -6949,6 +6954,7 @@ public partial class McpeSetTitle : Packet<McpeSetTitle>
69496954
public int fadeOutTime; // = null;
69506955
public string xuid; // = null;
69516956
public string platformOnlineId; // = null;
6957+
public string filteredString; // = null;
69526958

69536959
public McpeSetTitle()
69546960
{
@@ -6969,6 +6975,7 @@ protected override void EncodePacket()
69696975
WriteSignedVarInt(fadeOutTime);
69706976
Write(xuid);
69716977
Write(platformOnlineId);
6978+
Write(filteredString);
69726979

69736980
AfterEncode();
69746981
}
@@ -6989,6 +6996,7 @@ protected override void DecodePacket()
69896996
fadeOutTime = ReadSignedVarInt();
69906997
xuid = ReadString();
69916998
platformOnlineId = ReadString();
6999+
filteredString = ReadString();
69927000

69937001
AfterDecode();
69947002
}

src/MiNET/MiNET/Net/Packet.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,7 @@ public Transaction ReadTransaction()
10971097
FromPosition = ReadVector3(),
10981098
ClickPosition = ReadVector3(),
10991099
BlockRuntimeId = ReadUnsignedVarInt(),
1100-
ClientPredictedResult = ReadByte()
1100+
ClientPredictedResult = ReadUnsignedVarInt()
11011101
};
11021102
break;
11031103
case McpeInventoryTransaction.TransactionType.ItemUseOnEntity:
@@ -1267,15 +1267,16 @@ public void Write(ItemStackRequests requests)
12671267
{
12681268
Write((byte) McpeItemStackRequest.ActionType.CraftRecipe);
12691269
WriteUnsignedVarInt(ta.RecipeNetworkId);
1270-
Write(ta.ClientPredictedResult);
1270+
Write(ta.TimesCrafted);
12711271
break;
12721272
}
12731273

12741274
case CraftAutoAction ta:
12751275
{
12761276
Write((byte) McpeItemStackRequest.ActionType.CraftRecipeAuto);
12771277
WriteUnsignedVarInt(ta.RecipeNetworkId);
1278-
Write(ta.craftCount);
1278+
Write(ta.TimesCrafted2);
1279+
Write(ta.TimesCrafted);
12791280
Write((byte)ta.Ingredients.Count);
12801281
foreach (Item item in ta.Ingredients)
12811282
{
@@ -1461,15 +1462,16 @@ public ItemStackRequests ReadItemStackRequests()
14611462
{
14621463
var action = new CraftAction();
14631464
action.RecipeNetworkId = ReadUnsignedVarInt();
1464-
action.ClientPredictedResult = ReadByte();
1465+
action.TimesCrafted = ReadByte();
14651466
actions.Add(action);
14661467
break;
14671468
}
14681469
case McpeItemStackRequest.ActionType.CraftRecipeAuto:
14691470
{
14701471
var action = new CraftAutoAction();
14711472
action.RecipeNetworkId = ReadUnsignedVarInt();
1472-
action.craftCount = ReadByte();
1473+
action.TimesCrafted2 = ReadByte();
1474+
action.TimesCrafted = ReadByte();
14731475
var cou = ReadByte();
14741476
for (var a = 0; a < cou; a++)
14751477
{
@@ -1554,7 +1556,7 @@ public void Write(ItemStackResponses responses)
15541556
WriteUnsignedVarInt((uint) stackResponse.ResponseContainerInfos.Count);
15551557
foreach (StackResponseContainerInfo containerInfo in stackResponse.ResponseContainerInfos)
15561558
{
1557-
Write(new FullContainerName() { ContainerId = containerInfo.ContainerId, DynamicId = 0 });
1559+
Write(new FullContainerName() { ContainerId = containerInfo.ContainerId, DynamicId = containerInfo.DynamicId });
15581560
WriteUnsignedVarInt((uint) containerInfo.Slots.Count);
15591561
foreach (StackResponseSlotInfo slot in containerInfo.Slots)
15601562
{
@@ -1591,6 +1593,7 @@ public ItemStackResponses ReadItemStackResponses()
15911593
var containerInfo = new StackResponseContainerInfo();
15921594
var name = readFullContainerName();
15931595
containerInfo.ContainerId = name.ContainerId;
1596+
containerInfo.DynamicId = name.DynamicId;
15941597
var slotCount = ReadUnsignedVarInt();
15951598
containerInfo.Slots = new List<StackResponseSlotInfo>();
15961599

src/MiNET/MiNET/Net/RakNet/Datagram.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,11 @@ private static List<MessagePart> CreateMessageParts(Packet message, int mtuSize,
294294
if (message.IsMcpe) Log.Error($"Got bedrock message in unexpected place {message.GetType().Name}");
295295

296296
int maxPayloadSizeNoSplit = mtuSize - RakOfflineHandler.UdpHeaderSize - 4 - GetHeaderSize(message.ReliabilityHeader, false);
297+
int orderingIndex = 0;
297298
bool split = encodedMessage.Length >= maxPayloadSizeNoSplit;
298299

300+
if (message.ReliabilityHeader.Reliability == Reliability.ReliableOrdered) orderingIndex = Interlocked.Increment(ref session.OrderingIndex);
301+
299302
List<(int @from, int length)> splits = ArraySplit(encodedMessage.Length, mtuSize - RakOfflineHandler.UdpHeaderSize - 4 /*datagram header*/ - GetHeaderSize(message.ReliabilityHeader, split));
300303
int count = splits.Count;
301304
if (count == 0) Log.Warn("Got zero parts back from split");
@@ -305,10 +308,10 @@ private static List<MessagePart> CreateMessageParts(Packet message, int mtuSize,
305308
messagePart.ReliabilityHeader.Reliability = message.ReliabilityHeader.Reliability;
306309
messagePart.ReliabilityHeader.ReliableMessageNumber = Interlocked.Increment(ref session.ReliableMessageNumber);
307310
messagePart.ReliabilityHeader.OrderingChannel = 0;
308-
messagePart.ReliabilityHeader.OrderingIndex = message.ReliabilityHeader.OrderingIndex;
311+
messagePart.ReliabilityHeader.OrderingIndex = orderingIndex;
309312
messagePart.ReliabilityHeader.HasSplit = false;
310313
messagePart.Buffer = encodedMessage;
311-
314+
//Log.Warn($"1 part: {message.ReliabilityHeader.OrderingIndex} for {session.Username}");
312315
return new List<MessagePart>(1) {messagePart};
313316
}
314317

@@ -326,13 +329,13 @@ private static List<MessagePart> CreateMessageParts(Packet message, int mtuSize,
326329
messagePart.ReliabilityHeader.Reliability = message.ReliabilityHeader.Reliability;
327330
messagePart.ReliabilityHeader.ReliableMessageNumber = Interlocked.Increment(ref session.ReliableMessageNumber);
328331
messagePart.ReliabilityHeader.OrderingChannel = 0;
329-
messagePart.ReliabilityHeader.OrderingIndex = message.ReliabilityHeader.OrderingIndex;
332+
messagePart.ReliabilityHeader.OrderingIndex = orderingIndex;
330333
messagePart.ReliabilityHeader.HasSplit = count > 1;
331334
messagePart.ReliabilityHeader.PartCount = count;
332335
messagePart.ReliabilityHeader.PartId = splitId;
333336
messagePart.ReliabilityHeader.PartIndex = index++;
334337
messagePart.Buffer = encodedMessage.Slice(span.@from, span.length);
335-
338+
//Log.Warn($"split part: {message.ReliabilityHeader.OrderingIndex} for {session.Username}");
336339
messageParts.Add(messagePart);
337340
}
338341

src/MiNET/MiNET/Net/RakNet/RakConnection.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ private void ReceiveDatagram(ReadOnlyMemory<byte> receivedBytes, IPEndPoint clie
436436

437437
EnqueueAck(rakSession, datagram.Header.DatagramSequenceNumber);
438438

439-
if (Log.IsVerboseEnabled()) Log.Verbose($"Receive datagram #{datagram.Header.DatagramSequenceNumber} for {_endpoint}");
439+
//Log.Debug($"Receive datagram #{datagram.Header.DatagramSequenceNumber} for {_endpoint}");
440440

441441
HandleDatagram(rakSession, datagram);
442442
datagram.PutPool();
@@ -551,6 +551,7 @@ private void HandleAck(RakSession session, Ack ack, ConnectionInfo connectionInf
551551

552552
foreach ((int start, int end) range in ack.ranges)
553553
{
554+
//Log.Debug($"ACK: #{range.start} - #{range.end}");
554555
Interlocked.Increment(ref connectionInfo.NumberOfAckReceive);
555556

556557
for (int i = range.start; i <= range.end; i++)
@@ -679,7 +680,7 @@ internal async Task UpdateAsync(RakSession session)
679680
datagramTimeout = Math.Min(datagramTimeout, 3000);
680681
datagramTimeout = Math.Max(datagramTimeout, 100);
681682

682-
if (datagram.RetransmitImmediate || elapsedTime >= datagramTimeout)
683+
if (datagram.RetransmitImmediate || elapsedTime >= datagramTimeout/2)
683684
{
684685
if (!session.Evicted && session.WaitingForAckQueue.TryRemove(datagram.Header.DatagramSequenceNumber, out _))
685686
{
@@ -759,6 +760,8 @@ public async Task SendDatagramAsync(RakSession session, Datagram datagram)
759760
datagram.PutPool();
760761
}
761762

763+
//Log.Debug($"Send datagram #{datagram.Header.DatagramSequenceNumber} for {session.Username}");
764+
762765
//lock (session.SyncRoot)
763766
{
764767
await SendDataAsync(buffer, length, session.EndPoint);

0 commit comments

Comments
 (0)