mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Fix grindstones and looms on 1.17.40
This commit is contained in:
parent
9de26f2ba1
commit
483a336b8a
4 changed files with 22 additions and 7 deletions
|
@ -115,7 +115,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.CloudburstMC.Protocol</groupId>
|
<groupId>com.github.CloudburstMC.Protocol</groupId>
|
||||||
<artifactId>bedrock-v471</artifactId>
|
<artifactId>bedrock-v471</artifactId>
|
||||||
<version>b71f1c9</version>
|
<version>0bc10c8e</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
|
|
|
@ -64,7 +64,7 @@ import java.util.*;
|
||||||
public abstract class InventoryTranslator {
|
public abstract class InventoryTranslator {
|
||||||
|
|
||||||
public static final InventoryTranslator PLAYER_INVENTORY_TRANSLATOR = new PlayerInventoryTranslator();
|
public static final InventoryTranslator PLAYER_INVENTORY_TRANSLATOR = new PlayerInventoryTranslator();
|
||||||
public static final Map<WindowType, InventoryTranslator> INVENTORY_TRANSLATORS = new HashMap<WindowType, InventoryTranslator>() {
|
public static final Map<WindowType, InventoryTranslator> INVENTORY_TRANSLATORS = new HashMap<>() {
|
||||||
{
|
{
|
||||||
/* Player Inventory */
|
/* Player Inventory */
|
||||||
put(null, PLAYER_INVENTORY_TRANSLATOR);
|
put(null, PLAYER_INVENTORY_TRANSLATOR);
|
||||||
|
@ -395,7 +395,9 @@ public abstract class InventoryTranslator {
|
||||||
case CRAFT_RECIPE_AUTO: // Called by villagers
|
case CRAFT_RECIPE_AUTO: // Called by villagers
|
||||||
case CRAFT_NON_IMPLEMENTED_DEPRECATED: // Tends to be called for UI inventories
|
case CRAFT_NON_IMPLEMENTED_DEPRECATED: // Tends to be called for UI inventories
|
||||||
case CRAFT_RESULTS_DEPRECATED: // Tends to be called for UI inventories
|
case CRAFT_RESULTS_DEPRECATED: // Tends to be called for UI inventories
|
||||||
case CRAFT_RECIPE_OPTIONAL: { // Anvils and cartography tables will handle this
|
case CRAFT_RECIPE_OPTIONAL: // Anvils and cartography tables will handle this
|
||||||
|
case CRAFT_LOOM: // Looms 1.17.40+
|
||||||
|
case CRAFT_REPAIR_AND_DISENCHANT: { // Grindstones 1.17.40+
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -34,6 +34,7 @@ import com.nukkitx.protocol.bedrock.data.inventory.ContainerSlotType;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.ContainerType;
|
import com.nukkitx.protocol.bedrock.data.inventory.ContainerType;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.ItemStackRequest;
|
import com.nukkitx.protocol.bedrock.data.inventory.ItemStackRequest;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.StackRequestSlotInfoData;
|
import com.nukkitx.protocol.bedrock.data.inventory.StackRequestSlotInfoData;
|
||||||
|
import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.CraftLoomStackRequestActionData;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.CraftResultsDeprecatedStackRequestActionData;
|
import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.CraftResultsDeprecatedStackRequestActionData;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.StackRequestActionData;
|
import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.StackRequestActionData;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.StackRequestActionType;
|
import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.StackRequestActionType;
|
||||||
|
@ -118,12 +119,14 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator {
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldHandleRequestFirst(StackRequestActionData action, Inventory inventory) {
|
public boolean shouldHandleRequestFirst(StackRequestActionData action, Inventory inventory) {
|
||||||
// If the LOOM_MATERIAL slot is not empty, we are crafting a pattern that does not come from an item
|
// If the LOOM_MATERIAL slot is not empty, we are crafting a pattern that does not come from an item
|
||||||
return action.getType() == StackRequestActionType.CRAFT_NON_IMPLEMENTED_DEPRECATED && inventory.getItem(2).isEmpty();
|
// Remove the CRAFT_NON_IMPLEMENTED_DEPRECATED when 1.17.30 is dropped
|
||||||
|
return (action.getType() == StackRequestActionType.CRAFT_NON_IMPLEMENTED_DEPRECATED || action.getType() == StackRequestActionType.CRAFT_LOOM)
|
||||||
|
&& inventory.getItem(2).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStackResponsePacket.Response translateSpecialRequest(GeyserSession session, Inventory inventory, ItemStackRequest request) {
|
public ItemStackResponsePacket.Response translateSpecialRequest(GeyserSession session, Inventory inventory, ItemStackRequest request) {
|
||||||
// TODO: I anticipate this will be changed in the future to use something non-deprecated. Keep an eye out.
|
StackRequestActionData headerData = request.getActions()[0];
|
||||||
StackRequestActionData data = request.getActions()[1];
|
StackRequestActionData data = request.getActions()[1];
|
||||||
if (!(data instanceof CraftResultsDeprecatedStackRequestActionData craftData)) {
|
if (!(data instanceof CraftResultsDeprecatedStackRequestActionData craftData)) {
|
||||||
return rejectRequest(request);
|
return rejectRequest(request);
|
||||||
|
@ -133,8 +136,18 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator {
|
||||||
List<NbtMap> newBlockEntityTag = craftData.getResultItems()[0].getTag().getList("Patterns", NbtType.COMPOUND);
|
List<NbtMap> newBlockEntityTag = craftData.getResultItems()[0].getTag().getList("Patterns", NbtType.COMPOUND);
|
||||||
// Get the pattern that the Bedrock client requests - the last pattern in the Patterns list
|
// Get the pattern that the Bedrock client requests - the last pattern in the Patterns list
|
||||||
NbtMap pattern = newBlockEntityTag.get(newBlockEntityTag.size() - 1);
|
NbtMap pattern = newBlockEntityTag.get(newBlockEntityTag.size() - 1);
|
||||||
|
String bedrockPattern;
|
||||||
|
|
||||||
|
if (headerData instanceof CraftLoomStackRequestActionData loomData) {
|
||||||
|
// Prioritize this if on 1.17.40
|
||||||
|
// Remove the below if statement when 1.17.30 is dropped
|
||||||
|
bedrockPattern = loomData.getPatternId();
|
||||||
|
} else {
|
||||||
|
bedrockPattern = pattern.getString("Pattern");
|
||||||
|
}
|
||||||
|
|
||||||
// Get the Java index of this pattern
|
// Get the Java index of this pattern
|
||||||
int index = PATTERN_TO_INDEX.getOrDefault(pattern.getString("Pattern"), -1);
|
int index = PATTERN_TO_INDEX.getOrDefault(bedrockPattern, -1);
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
return rejectRequest(request);
|
return rejectRequest(request);
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ public class BannerTranslator extends ItemTranslator {
|
||||||
/**
|
/**
|
||||||
* Convert the Bedrock edition banner pattern nbt to Java edition
|
* Convert the Bedrock edition banner pattern nbt to Java edition
|
||||||
*
|
*
|
||||||
* @param pattern Bedorck edition pattern nbt
|
* @param pattern Bedrock edition pattern nbt
|
||||||
* @return The Java edition format pattern nbt
|
* @return The Java edition format pattern nbt
|
||||||
*/
|
*/
|
||||||
public static CompoundTag getJavaBannerPattern(NbtMap pattern) {
|
public static CompoundTag getJavaBannerPattern(NbtMap pattern) {
|
||||||
|
|
Loading…
Reference in a new issue