2022-07-02 16:50:16 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
|
|
* in the Software without restriction, including without limitation the rights
|
|
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
|
|
* furnished to do so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
* THE SOFTWARE.
|
|
|
|
*
|
|
|
|
* @author GeyserMC
|
|
|
|
* @link https://github.com/GeyserMC/Geyser
|
|
|
|
*/
|
|
|
|
|
|
|
|
package org.geysermc.geyser.item;
|
|
|
|
|
|
|
|
import lombok.EqualsAndHashCode;
|
|
|
|
import lombok.ToString;
|
|
|
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
|
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
|
|
import org.geysermc.geyser.api.item.custom.CustomItemOptions;
|
|
|
|
import org.geysermc.geyser.api.item.custom.CustomRenderOffsets;
|
|
|
|
import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData;
|
|
|
|
|
|
|
|
import java.util.OptionalInt;
|
|
|
|
import java.util.Set;
|
|
|
|
|
2023-12-05 23:54:42 +00:00
|
|
|
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
|
2022-07-02 16:50:16 +00:00
|
|
|
@EqualsAndHashCode(callSuper = true)
|
|
|
|
@ToString
|
|
|
|
public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData implements NonVanillaCustomItemData {
|
|
|
|
private final String identifier;
|
|
|
|
private final int javaId;
|
|
|
|
private final int stackSize;
|
|
|
|
private final int maxDamage;
|
|
|
|
private final String toolType;
|
|
|
|
private final String toolTier;
|
|
|
|
private final String armorType;
|
|
|
|
private final int protectionValue;
|
|
|
|
private final String translationString;
|
|
|
|
private final Set<String> repairMaterials;
|
|
|
|
private final OptionalInt creativeCategory;
|
|
|
|
private final String creativeGroup;
|
|
|
|
private final boolean isHat;
|
2023-05-12 23:40:17 +00:00
|
|
|
private final boolean isFoil;
|
2022-07-02 16:50:16 +00:00
|
|
|
private final boolean isTool;
|
2023-05-21 12:22:15 +00:00
|
|
|
private final boolean isEdible;
|
|
|
|
private final boolean canAlwaysEat;
|
|
|
|
private final boolean isChargeable;
|
2022-07-02 16:50:16 +00:00
|
|
|
|
2024-01-31 10:21:06 +00:00
|
|
|
public GeyserNonVanillaCustomItemData(Builder builder) {
|
2022-07-02 16:50:16 +00:00
|
|
|
super(builder.name, builder.customItemOptions, builder.displayName, builder.icon, builder.allowOffhand,
|
2023-11-09 07:44:13 +00:00
|
|
|
builder.displayHandheld, builder.textureSize, builder.renderOffsets, builder.tags);
|
2022-07-02 16:50:16 +00:00
|
|
|
|
|
|
|
this.identifier = builder.identifier;
|
|
|
|
this.javaId = builder.javaId;
|
|
|
|
this.stackSize = builder.stackSize;
|
|
|
|
this.maxDamage = builder.maxDamage;
|
|
|
|
this.toolType = builder.toolType;
|
|
|
|
this.toolTier = builder.toolTier;
|
|
|
|
this.armorType = builder.armorType;
|
|
|
|
this.protectionValue = builder.protectionValue;
|
|
|
|
this.translationString = builder.translationString;
|
|
|
|
this.repairMaterials = builder.repairMaterials;
|
|
|
|
this.creativeCategory = builder.creativeCategory;
|
|
|
|
this.creativeGroup = builder.creativeGroup;
|
|
|
|
this.isHat = builder.hat;
|
2023-05-12 23:40:17 +00:00
|
|
|
this.isFoil = builder.foil;
|
2022-07-02 16:50:16 +00:00
|
|
|
this.isTool = builder.tool;
|
2023-05-21 12:22:15 +00:00
|
|
|
this.isEdible = builder.edible;
|
|
|
|
this.canAlwaysEat = builder.canAlwaysEat;
|
|
|
|
this.isChargeable = builder.chargeable;
|
2022-07-02 16:50:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2023-12-05 23:54:42 +00:00
|
|
|
public @NonNull String identifier() {
|
2022-07-02 16:50:16 +00:00
|
|
|
return identifier;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int javaId() {
|
|
|
|
return javaId;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int stackSize() {
|
|
|
|
return stackSize;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int maxDamage() {
|
|
|
|
return maxDamage;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toolType() {
|
|
|
|
return toolType;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String toolTier() {
|
|
|
|
return toolTier;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public @Nullable String armorType() {
|
|
|
|
return armorType;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int protectionValue() {
|
|
|
|
return protectionValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String translationString() {
|
|
|
|
return translationString;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Set<String> repairMaterials() {
|
|
|
|
return repairMaterials;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2023-12-05 23:54:42 +00:00
|
|
|
public @NonNull OptionalInt creativeCategory() {
|
2022-07-02 16:50:16 +00:00
|
|
|
return creativeCategory;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String creativeGroup() {
|
|
|
|
return creativeGroup;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isHat() {
|
|
|
|
return isHat;
|
|
|
|
}
|
|
|
|
|
2023-05-12 23:40:17 +00:00
|
|
|
@Override
|
|
|
|
public boolean isFoil() {
|
|
|
|
return isFoil;
|
|
|
|
}
|
|
|
|
|
2023-05-21 12:22:15 +00:00
|
|
|
@Override
|
|
|
|
public boolean isEdible() {
|
|
|
|
return isEdible;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canAlwaysEat() {
|
|
|
|
return canAlwaysEat;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isChargeable() {
|
|
|
|
return isChargeable;
|
|
|
|
}
|
|
|
|
|
2024-01-31 10:21:06 +00:00
|
|
|
public static class Builder extends GeyserCustomItemData.Builder implements NonVanillaCustomItemData.Builder {
|
2022-07-02 16:50:16 +00:00
|
|
|
private String identifier = null;
|
|
|
|
private int javaId = -1;
|
|
|
|
|
|
|
|
private int stackSize = 64;
|
|
|
|
|
|
|
|
private int maxDamage = 0;
|
|
|
|
|
|
|
|
private String toolType = null;
|
|
|
|
private String toolTier = null;
|
|
|
|
|
|
|
|
private String armorType = null;
|
|
|
|
private int protectionValue = 0;
|
|
|
|
|
|
|
|
private String translationString;
|
|
|
|
|
|
|
|
private Set<String> repairMaterials;
|
|
|
|
|
|
|
|
private OptionalInt creativeCategory = OptionalInt.empty();
|
|
|
|
private String creativeGroup = null;
|
|
|
|
|
|
|
|
private boolean hat = false;
|
2023-05-12 23:40:17 +00:00
|
|
|
private boolean foil = false;
|
2022-07-02 16:50:16 +00:00
|
|
|
private boolean tool = false;
|
2023-05-21 12:22:15 +00:00
|
|
|
private boolean edible = false;
|
|
|
|
private boolean canAlwaysEat = false;
|
|
|
|
private boolean chargeable = false;
|
2022-07-02 16:50:16 +00:00
|
|
|
|
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder name(@NonNull String name) {
|
|
|
|
return (Builder) super.name(name);
|
2022-07-02 16:50:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder customItemOptions(@NonNull CustomItemOptions customItemOptions) {
|
2022-07-02 16:50:16 +00:00
|
|
|
//Do nothing, as that value won't be read
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder allowOffhand(boolean allowOffhand) {
|
|
|
|
return (Builder) super.allowOffhand(allowOffhand);
|
2022-07-02 16:50:16 +00:00
|
|
|
}
|
|
|
|
|
2023-04-11 18:32:31 +00:00
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder displayHandheld(boolean displayHandheld) {
|
|
|
|
return (Builder) super.displayHandheld(displayHandheld);
|
2023-04-11 18:32:31 +00:00
|
|
|
}
|
|
|
|
|
2022-07-02 16:50:16 +00:00
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder displayName(@NonNull String displayName) {
|
|
|
|
return (Builder) super.displayName(displayName);
|
2022-07-02 16:50:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder icon(@NonNull String icon) {
|
|
|
|
return (Builder) super.icon(icon);
|
2022-07-02 16:50:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder textureSize(int textureSize) {
|
|
|
|
return (Builder) super.textureSize(textureSize);
|
2022-07-02 16:50:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder renderOffsets(CustomRenderOffsets renderOffsets) {
|
|
|
|
return (Builder) super.renderOffsets(renderOffsets);
|
2022-07-02 16:50:16 +00:00
|
|
|
}
|
|
|
|
|
2023-11-09 07:44:13 +00:00
|
|
|
@Override
|
2024-01-31 10:21:06 +00:00
|
|
|
public Builder tags(@Nullable Set<String> tags) {
|
|
|
|
return (Builder) super.tags(tags);
|
2023-11-09 07:44:13 +00:00
|
|
|
}
|
|
|
|
|
2022-07-02 16:50:16 +00:00
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder identifier(@NonNull String identifier) {
|
|
|
|
this.identifier = identifier;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder javaId(int javaId) {
|
|
|
|
this.javaId = javaId;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder stackSize(int stackSize) {
|
|
|
|
this.stackSize = stackSize;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder maxDamage(int maxDamage) {
|
|
|
|
this.maxDamage = maxDamage;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder toolType(@Nullable String toolType) {
|
|
|
|
this.toolType = toolType;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder toolTier(@Nullable String toolTier) {
|
|
|
|
this.toolTier = toolTier;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder armorType(@Nullable String armorType) {
|
|
|
|
this.armorType = armorType;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder protectionValue(int protectionValue) {
|
|
|
|
this.protectionValue = protectionValue;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder translationString(@Nullable String translationString) {
|
|
|
|
this.translationString = translationString;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder repairMaterials(@Nullable Set<String> repairMaterials) {
|
|
|
|
this.repairMaterials = repairMaterials;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder creativeCategory(int creativeCategory) {
|
|
|
|
this.creativeCategory = OptionalInt.of(creativeCategory);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder creativeGroup(@Nullable String creativeGroup) {
|
|
|
|
this.creativeGroup = creativeGroup;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder hat(boolean isHat) {
|
|
|
|
this.hat = isHat;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2023-05-12 23:40:17 +00:00
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder foil(boolean isFoil) {
|
|
|
|
this.foil = isFoil;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2023-05-21 12:22:15 +00:00
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder edible(boolean isEdible) {
|
|
|
|
this.edible = isEdible;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder canAlwaysEat(boolean canAlwaysEat) {
|
|
|
|
this.canAlwaysEat = canAlwaysEat;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData.Builder chargeable(boolean isChargeable) {
|
|
|
|
this.chargeable = isChargeable;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2022-07-02 16:50:16 +00:00
|
|
|
@Override
|
|
|
|
public NonVanillaCustomItemData build() {
|
|
|
|
if (identifier == null || javaId == -1) {
|
|
|
|
throw new IllegalArgumentException("Identifier and javaId must be set");
|
|
|
|
}
|
|
|
|
|
|
|
|
super.customItemOptions(CustomItemOptions.builder().build());
|
|
|
|
super.build();
|
|
|
|
return new GeyserNonVanillaCustomItemData(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|