@@ -7,6 +7,7 @@ package com.mojang.brigadier;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import com.mojang.brigadier.context.CommandContext;
|
||||
import com.mojang.brigadier.context.CommandContextBuilder;
|
||||
import com.mojang.brigadier.context.ContextChain;
|
||||
import com.mojang.brigadier.context.SuggestionContext;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.brigadier.suggestion.Suggestions;
|
||||
@@ -23,6 +24,7 @@ import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Predicate;
|
||||
@@ -215,76 +217,16 @@ public class CommandDispatcher<S> {
|
||||
}
|
||||
}
|
||||
|
||||
int result = 0;
|
||||
int successfulForks = 0;
|
||||
boolean forked = false;
|
||||
boolean foundCommand = false;
|
||||
final String command = parse.getReader().getString();
|
||||
final CommandContext<S> original = parse.getContext().build(command);
|
||||
List<CommandContext<S>> contexts = Collections.singletonList(original);
|
||||
ArrayList<CommandContext<S>> next = null;
|
||||
|
||||
while (contexts != null) {
|
||||
final int size = contexts.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
final CommandContext<S> context = contexts.get(i);
|
||||
final CommandContext<S> child = context.getChild();
|
||||
if (child != null) {
|
||||
forked |= context.isForked();
|
||||
if (child.hasNodes()) {
|
||||
final RedirectModifier<S> modifier = context.getRedirectModifier();
|
||||
if (modifier == null) {
|
||||
if (next == null) {
|
||||
next = new ArrayList<>(1);
|
||||
}
|
||||
next.add(child.copyFor(context.getSource()));
|
||||
} else {
|
||||
try {
|
||||
final Collection<S> results = modifier.apply(context);
|
||||
if (!results.isEmpty()) {
|
||||
if (next == null) {
|
||||
next = new ArrayList<>(results.size());
|
||||
}
|
||||
for (final S source : results) {
|
||||
next.add(child.copyFor(source));
|
||||
}
|
||||
} else {
|
||||
foundCommand = true;
|
||||
}
|
||||
} catch (final CommandSyntaxException ex) {
|
||||
consumer.onCommandComplete(context, false, 0);
|
||||
if (!forked) {
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (context.getCommand() != null) {
|
||||
foundCommand = true;
|
||||
try {
|
||||
final int value = context.getCommand().run(context);
|
||||
result += value;
|
||||
consumer.onCommandComplete(context, true, value);
|
||||
successfulForks++;
|
||||
} catch (final CommandSyntaxException ex) {
|
||||
consumer.onCommandComplete(context, false, 0);
|
||||
if (!forked) {
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
contexts = next;
|
||||
next = null;
|
||||
}
|
||||
|
||||
if (!foundCommand) {
|
||||
final Optional<ContextChain<S>> flatContext = ContextChain.tryFlatten(original);
|
||||
if (!flatContext.isPresent()) {
|
||||
consumer.onCommandComplete(original, false, 0);
|
||||
throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownCommand().createWithContext(parse.getReader());
|
||||
}
|
||||
|
||||
return forked ? successfulForks : result;
|
||||
return flatContext.get().executeAll(original.getSource(), consumer);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,6 +29,7 @@ import net.minecraft.world.entity.decoration.EntityPainting;
|
||||
import net.minecraft.world.entity.item.EntityFallingBlock;
|
||||
import net.minecraft.world.entity.item.EntityTNTPrimed;
|
||||
import net.minecraft.world.entity.monster.EntityZombie;
|
||||
import net.minecraft.world.entity.monster.breeze.Breeze;
|
||||
import net.minecraft.world.entity.projectile.EntityEgg;
|
||||
import net.minecraft.world.entity.projectile.EntityEnderSignal;
|
||||
import net.minecraft.world.entity.projectile.EntityEvokerFangs;
|
||||
@@ -197,6 +198,7 @@ import org.bukkit.entity.Villager;
|
||||
import org.bukkit.entity.Vindicator;
|
||||
import org.bukkit.entity.WanderingTrader;
|
||||
import org.bukkit.entity.Warden;
|
||||
import org.bukkit.entity.WindCharge;
|
||||
import org.bukkit.entity.Witch;
|
||||
import org.bukkit.entity.Wither;
|
||||
import org.bukkit.entity.WitherSkeleton;
|
||||
@@ -676,6 +678,8 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
|
||||
entity = EntityTypes.WITHER_SKULL.create(world);
|
||||
} else if (DragonFireball.class.isAssignableFrom(clazz)) {
|
||||
entity = EntityTypes.DRAGON_FIREBALL.create(world);
|
||||
} else if (WindCharge.class.isAssignableFrom(clazz)) {
|
||||
entity = EntityTypes.WIND_CHARGE.create(world);
|
||||
} else {
|
||||
entity = EntityTypes.FIREBALL.create(world);
|
||||
}
|
||||
@@ -912,6 +916,8 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
|
||||
entity = EntityTypes.WARDEN.create(world);
|
||||
} else if (Sniffer.class.isAssignableFrom(clazz)) {
|
||||
entity = EntityTypes.SNIFFER.create(world);
|
||||
} else if (Breeze.class.isAssignableFrom(clazz)) {
|
||||
entity = EntityTypes.BREEZE.create(world);
|
||||
}
|
||||
|
||||
if (entity != null) {
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.brigadier.tree.CommandNode;
|
||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
import com.mojang.serialization.Dynamic;
|
||||
import com.mojang.serialization.DynamicOps;
|
||||
import com.mojang.serialization.Lifecycle;
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||
@@ -56,6 +57,8 @@ import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.nbt.DynamicOpsNBT;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NbtException;
|
||||
import net.minecraft.nbt.ReportedNbtException;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import net.minecraft.resources.RegistryOps;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
@@ -113,6 +116,7 @@ import net.minecraft.world.level.material.FluidType;
|
||||
import net.minecraft.world.level.saveddata.maps.MapIcon;
|
||||
import net.minecraft.world.level.saveddata.maps.WorldMap;
|
||||
import net.minecraft.world.level.storage.Convertable;
|
||||
import net.minecraft.world.level.storage.LevelDataAndDimensions;
|
||||
import net.minecraft.world.level.storage.SaveData;
|
||||
import net.minecraft.world.level.storage.WorldDataServer;
|
||||
import net.minecraft.world.level.storage.WorldNBTStorage;
|
||||
@@ -1081,17 +1085,54 @@ public final class CraftServer implements Server {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
|
||||
Dynamic<?> dynamic;
|
||||
if (worldSession.hasWorldData()) {
|
||||
net.minecraft.world.level.storage.WorldInfo worldinfo;
|
||||
|
||||
try {
|
||||
dynamic = worldSession.getDataTag();
|
||||
worldinfo = worldSession.getSummary(dynamic);
|
||||
} catch (NbtException | ReportedNbtException | IOException ioexception) {
|
||||
Convertable.b convertable_b = worldSession.getLevelDirectory();
|
||||
|
||||
MinecraftServer.LOGGER.warn("Failed to load world data from {}", convertable_b.dataFile(), ioexception);
|
||||
MinecraftServer.LOGGER.info("Attempting to use fallback");
|
||||
|
||||
try {
|
||||
dynamic = worldSession.getDataTagFallback();
|
||||
worldinfo = worldSession.getSummary(dynamic);
|
||||
} catch (NbtException | ReportedNbtException | IOException ioexception1) {
|
||||
MinecraftServer.LOGGER.error("Failed to load world data from {}", convertable_b.oldDataFile(), ioexception1);
|
||||
MinecraftServer.LOGGER.error("Failed to load world data from {} and {}. World files may be corrupted. Shutting down.", convertable_b.dataFile(), convertable_b.oldDataFile());
|
||||
return null;
|
||||
}
|
||||
|
||||
worldSession.restoreLevelDataFromOld();
|
||||
}
|
||||
|
||||
if (worldinfo.requiresManualConversion()) {
|
||||
MinecraftServer.LOGGER.info("This world must be opened in an older version (like 1.6.4) to be safely converted");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!worldinfo.isCompatible()) {
|
||||
MinecraftServer.LOGGER.info("This world was created by an incompatible version.");
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
dynamic = null;
|
||||
}
|
||||
|
||||
boolean hardcore = creator.hardcore();
|
||||
|
||||
WorldDataServer worlddata;
|
||||
WorldLoader.a worldloader_a = console.worldLoader;
|
||||
IRegistry<WorldDimension> iregistry = worldloader_a.datapackDimensions().registryOrThrow(Registries.LEVEL_STEM);
|
||||
DynamicOps<NBTBase> dynamicops = RegistryOps.create(DynamicOpsNBT.INSTANCE, (HolderLookup.b) worldloader_a.datapackWorldgen());
|
||||
Pair<SaveData, WorldDimensions.b> pair = worldSession.getDataTag(dynamicops, worldloader_a.dataConfiguration(), iregistry, worldloader_a.datapackWorldgen().allRegistriesLifecycle());
|
||||
if (dynamic != null) {
|
||||
LevelDataAndDimensions leveldataanddimensions = Convertable.getLevelDataAndDimensions(dynamic, worldloader_a.dataConfiguration(), iregistry, worldloader_a.datapackWorldgen());
|
||||
|
||||
if (pair != null) {
|
||||
worlddata = (WorldDataServer) pair.getFirst();
|
||||
iregistry = pair.getSecond().dimensions();
|
||||
worlddata = (WorldDataServer) leveldataanddimensions.worldData();
|
||||
iregistry = leveldataanddimensions.dimensions().dimensions();
|
||||
} else {
|
||||
WorldSettings worldsettings;
|
||||
WorldOptions worldoptions = new WorldOptions(creator.seed(), creator.generateStructures(), false);
|
||||
|
||||
@@ -233,8 +233,8 @@ public enum CraftStatistic {
|
||||
|
||||
// Update scoreboards
|
||||
if (player != null) {
|
||||
player.level().getCraftServer().getScoreboardManager().getScoreboardScores(nmsStatistic, player.getScoreboardName(), score -> {
|
||||
score.setScore(newValue);
|
||||
player.level().getCraftServer().getScoreboardManager().forAllObjectives(nmsStatistic, player, score -> {
|
||||
score.set(newValue);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -277,8 +277,8 @@ public enum CraftStatistic {
|
||||
|
||||
// Update scoreboards
|
||||
if (player != null) {
|
||||
player.level().getCraftServer().getScoreboardManager().getScoreboardScores(nmsStatistic, player.getScoreboardName(), score -> {
|
||||
score.setScore(newValue);
|
||||
player.level().getCraftServer().getScoreboardManager().forAllObjectives(nmsStatistic, player, score -> {
|
||||
score.set(newValue);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -321,8 +321,8 @@ public enum CraftStatistic {
|
||||
|
||||
// Update scoreboards
|
||||
if (player != null) {
|
||||
player.level().getCraftServer().getScoreboardManager().getScoreboardScores(nmsStatistic, player.getScoreboardName(), score -> {
|
||||
score.setScore(newValue);
|
||||
player.level().getCraftServer().getScoreboardManager().forAllObjectives(nmsStatistic, player, score -> {
|
||||
score.set(newValue);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ import net.minecraft.world.level.storage.SavedFile;
|
||||
import net.minecraft.world.phys.AxisAlignedBB;
|
||||
import net.minecraft.world.phys.MovingObjectPosition;
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
import net.minecraft.world.phys.shapes.VoxelShapeCollision;
|
||||
import org.bukkit.BlockChangeDelegate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@@ -950,7 +951,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
Vector dir = direction.clone().normalize().multiply(maxDistance);
|
||||
Vec3D startPos = CraftLocation.toVec3D(start);
|
||||
Vec3D endPos = startPos.add(dir.getX(), dir.getY(), dir.getZ());
|
||||
MovingObjectPosition nmsHitResult = this.getHandle().clip(new RayTrace(startPos, endPos, ignorePassableBlocks ? RayTrace.BlockCollisionOption.COLLIDER : RayTrace.BlockCollisionOption.OUTLINE, CraftFluidCollisionMode.toNMS(fluidCollisionMode), null));
|
||||
MovingObjectPosition nmsHitResult = this.getHandle().clip(new RayTrace(startPos, endPos, ignorePassableBlocks ? RayTrace.BlockCollisionOption.COLLIDER : RayTrace.BlockCollisionOption.OUTLINE, CraftFluidCollisionMode.toNMS(fluidCollisionMode), VoxelShapeCollision.empty()));
|
||||
|
||||
return CraftRayTraceResult.fromNMS(this, nmsHitResult);
|
||||
}
|
||||
|
||||
@@ -200,11 +200,11 @@ public class Main {
|
||||
useConsole = false;
|
||||
}
|
||||
|
||||
if (false && Main.class.getPackage().getImplementationVendor() != null && System.getProperty("IReallyKnowWhatIAmDoingISwear") == null) {
|
||||
if (Main.class.getPackage().getImplementationVendor() != null && System.getProperty("IReallyKnowWhatIAmDoingISwear") == null) {
|
||||
Date buildDate = new Date(Integer.parseInt(Main.class.getPackage().getImplementationVendor()) * 1000L);
|
||||
|
||||
Calendar deadline = Calendar.getInstance();
|
||||
deadline.add(Calendar.DAY_OF_YEAR, -21);
|
||||
deadline.add(Calendar.DAY_OF_YEAR, -3);
|
||||
if (buildDate.before(deadline.getTime())) {
|
||||
System.err.println("*** Error, this build is outdated ***");
|
||||
System.err.println("*** Please download a new build as per instructions from https://www.spigotmc.org/go/outdated-spigot ***");
|
||||
|
||||
@@ -60,6 +60,6 @@ public class CraftAdvancementDisplay implements org.bukkit.advancement.Advanceme
|
||||
|
||||
@Override
|
||||
public AdvancementDisplayType getType() {
|
||||
return AdvancementDisplayType.values()[handle.getFrame().ordinal()];
|
||||
return AdvancementDisplayType.values()[handle.getType().ordinal()];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,10 +71,10 @@ public class CraftAttributeInstance implements AttributeInstance {
|
||||
}
|
||||
|
||||
public static AttributeModifier convert(net.minecraft.world.entity.ai.attributes.AttributeModifier nms) {
|
||||
return new AttributeModifier(nms.getId(), nms.getName(), nms.getAmount(), AttributeModifier.Operation.values()[nms.getOperation().ordinal()]);
|
||||
return new AttributeModifier(nms.getId(), nms.name, nms.getAmount(), AttributeModifier.Operation.values()[nms.getOperation().ordinal()]);
|
||||
}
|
||||
|
||||
public static AttributeModifier convert(net.minecraft.world.entity.ai.attributes.AttributeModifier nms, EquipmentSlot slot) {
|
||||
return new AttributeModifier(nms.getId(), nms.getName(), nms.getAmount(), AttributeModifier.Operation.values()[nms.getOperation().ordinal()], slot);
|
||||
return new AttributeModifier(nms.getId(), nms.name, nms.getAmount(), AttributeModifier.Operation.values()[nms.getOperation().ordinal()], slot);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import net.minecraft.world.phys.MovingObjectPosition;
|
||||
import net.minecraft.world.phys.MovingObjectPositionBlock;
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import net.minecraft.world.phys.shapes.VoxelShapeCollision;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.FluidCollisionMode;
|
||||
@@ -580,7 +581,7 @@ public class CraftBlock implements Block {
|
||||
Vec3D startPos = CraftLocation.toVec3D(start);
|
||||
Vec3D endPos = startPos.add(dir.getX(), dir.getY(), dir.getZ());
|
||||
|
||||
MovingObjectPosition nmsHitResult = world.clip(new RayTrace(startPos, endPos, RayTrace.BlockCollisionOption.OUTLINE, CraftFluidCollisionMode.toNMS(fluidCollisionMode), null), position);
|
||||
MovingObjectPosition nmsHitResult = world.clip(new RayTrace(startPos, endPos, RayTrace.BlockCollisionOption.OUTLINE, CraftFluidCollisionMode.toNMS(fluidCollisionMode), VoxelShapeCollision.empty()), position);
|
||||
return CraftRayTraceResult.fromNMS(this.getWorld(), nmsHitResult);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import net.minecraft.world.level.GeneratorAccess;
|
||||
import net.minecraft.world.level.block.entity.BrushableBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.CalibratedSculkSensorBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.ChiseledBookShelfBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.CrafterBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.DecoratedPotBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.HangingSignBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.SculkCatalystBlockEntity;
|
||||
@@ -52,6 +53,7 @@ import net.minecraft.world.level.block.entity.TileEntitySign;
|
||||
import net.minecraft.world.level.block.entity.TileEntitySkull;
|
||||
import net.minecraft.world.level.block.entity.TileEntitySmoker;
|
||||
import net.minecraft.world.level.block.entity.TileEntityStructure;
|
||||
import net.minecraft.world.level.block.entity.TrialSpawnerBlockEntity;
|
||||
import net.minecraft.world.level.block.piston.TileEntityPiston;
|
||||
import net.minecraft.world.level.block.state.IBlockData;
|
||||
import org.bukkit.Material;
|
||||
@@ -333,6 +335,8 @@ public final class CraftBlockStates {
|
||||
register(Material.SUSPICIOUS_SAND, CraftSuspiciousSand.class, CraftSuspiciousSand::new, BrushableBlockEntity::new);
|
||||
register(Material.SUSPICIOUS_GRAVEL, CraftBrushableBlock.class, CraftBrushableBlock::new, BrushableBlockEntity::new);
|
||||
register(Material.TRAPPED_CHEST, CraftChest.class, CraftChest::new, TileEntityChestTrapped::new);
|
||||
register(Material.CRAFTER, CraftCrafter.class, CraftCrafter::new, CrafterBlockEntity::new);
|
||||
register(Material.TRIAL_SPAWNER, CraftTrialSpawner.class, CraftTrialSpawner::new, TrialSpawnerBlockEntity::new);
|
||||
}
|
||||
|
||||
private static void register(Material blockType, BlockStateFactory<?> factory) {
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
package org.bukkit.craftbukkit.block;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.minecraft.world.level.block.entity.CrafterBlockEntity;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Crafter;
|
||||
import org.bukkit.craftbukkit.inventory.CraftInventory;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class CraftCrafter extends CraftLootable<CrafterBlockEntity> implements Crafter {
|
||||
|
||||
public CraftCrafter(World world, CrafterBlockEntity tileEntity) {
|
||||
super(world, tileEntity);
|
||||
}
|
||||
|
||||
protected CraftCrafter(CraftCrafter state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory getSnapshotInventory() {
|
||||
return new CraftInventory(this.getSnapshot());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
if (!this.isPlaced()) {
|
||||
return this.getSnapshotInventory();
|
||||
}
|
||||
|
||||
return new CraftInventory(this.getTileEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftCrafter copy() {
|
||||
return new CraftCrafter(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCraftingTicks() {
|
||||
return getSnapshot().craftingTicksRemaining;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCraftingTicks(int ticks) {
|
||||
getSnapshot().setCraftingTicksRemaining(ticks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSlotDisabled(int slot) {
|
||||
Preconditions.checkArgument(slot >= 0 && slot < 9, "Invalid slot index %s for Crafter", slot);
|
||||
|
||||
return getSnapshot().isSlotDisabled(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSlotDisabled(int slot, boolean disabled) {
|
||||
Preconditions.checkArgument(slot >= 0 && slot < 9, "Invalid slot index %s for Crafter", slot);
|
||||
|
||||
getSnapshot().setSlotState(slot, disabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggered() {
|
||||
return getSnapshot().isTriggered();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTriggered(boolean triggered) {
|
||||
getSnapshot().setTriggered(triggered);
|
||||
}
|
||||
}
|
||||
@@ -82,7 +82,7 @@ public class CraftJukebox extends CraftBlockEntityState<TileEntityJukeBox> imple
|
||||
|
||||
@Override
|
||||
public org.bukkit.inventory.ItemStack getRecord() {
|
||||
ItemStack record = this.getSnapshot().getFirstItem();
|
||||
ItemStack record = this.getSnapshot().getTheItem();
|
||||
return CraftItemStack.asBukkitCopy(record);
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ public class CraftJukebox extends CraftBlockEntityState<TileEntityJukeBox> imple
|
||||
return false;
|
||||
}
|
||||
|
||||
ItemStack record = jukebox.getFirstItem();
|
||||
ItemStack record = jukebox.getTheItem();
|
||||
if (record.isEmpty() || isPlaying()) {
|
||||
return false;
|
||||
}
|
||||
@@ -147,7 +147,7 @@ public class CraftJukebox extends CraftBlockEntityState<TileEntityJukeBox> imple
|
||||
if (!(tileEntity instanceof TileEntityJukeBox)) return false;
|
||||
|
||||
TileEntityJukeBox jukebox = (TileEntityJukeBox) tileEntity;
|
||||
boolean result = !jukebox.getFirstItem().isEmpty();
|
||||
boolean result = !jukebox.getTheItem().isEmpty();
|
||||
jukebox.popOutRecord();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.bukkit.craftbukkit.block;
|
||||
|
||||
import net.minecraft.world.level.block.entity.TrialSpawnerBlockEntity;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.TrialSpawner;
|
||||
|
||||
public class CraftTrialSpawner extends CraftBlockEntityState<TrialSpawnerBlockEntity> implements TrialSpawner {
|
||||
|
||||
public CraftTrialSpawner(World world, TrialSpawnerBlockEntity tileEntity) {
|
||||
super(world, tileEntity);
|
||||
}
|
||||
|
||||
protected CraftTrialSpawner(CraftTrialSpawner state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftTrialSpawner copy() {
|
||||
return new CraftTrialSpawner(this);
|
||||
}
|
||||
}
|
||||
@@ -493,6 +493,8 @@ public class CraftBlockData implements BlockData {
|
||||
register(net.minecraft.world.level.block.CeilingHangingSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftCeilingHangingSign::new);
|
||||
register(net.minecraft.world.level.block.CherryLeavesBlock.class, org.bukkit.craftbukkit.block.impl.CraftCherryLeaves::new);
|
||||
register(net.minecraft.world.level.block.ChiseledBookShelfBlock.class, org.bukkit.craftbukkit.block.impl.CraftChiseledBookShelf::new);
|
||||
register(net.minecraft.world.level.block.CopperBulbBlock.class, org.bukkit.craftbukkit.block.impl.CraftCopperBulb::new);
|
||||
register(net.minecraft.world.level.block.CrafterBlock.class, org.bukkit.craftbukkit.block.impl.CraftCrafter::new);
|
||||
register(net.minecraft.world.level.block.DecoratedPotBlock.class, org.bukkit.craftbukkit.block.impl.CraftDecoratedPot::new);
|
||||
register(net.minecraft.world.level.block.EquipableCarvedPumpkinBlock.class, org.bukkit.craftbukkit.block.impl.CraftEquipableCarvedPumpkin::new);
|
||||
register(net.minecraft.world.level.block.GlowLichenBlock.class, org.bukkit.craftbukkit.block.impl.CraftGlowLichen::new);
|
||||
@@ -508,7 +510,6 @@ public class CraftBlockData implements BlockData {
|
||||
register(net.minecraft.world.level.block.PinkPetalsBlock.class, org.bukkit.craftbukkit.block.impl.CraftPinkPetals::new);
|
||||
register(net.minecraft.world.level.block.PitcherCropBlock.class, org.bukkit.craftbukkit.block.impl.CraftPitcherCrop::new);
|
||||
register(net.minecraft.world.level.block.PointedDripstoneBlock.class, org.bukkit.craftbukkit.block.impl.CraftPointedDripstone::new);
|
||||
register(net.minecraft.world.level.block.PowderSnowCauldronBlock.class, org.bukkit.craftbukkit.block.impl.CraftPowderSnowCauldron::new);
|
||||
register(net.minecraft.world.level.block.SculkCatalystBlock.class, org.bukkit.craftbukkit.block.impl.CraftSculkCatalyst::new);
|
||||
register(net.minecraft.world.level.block.SculkSensorBlock.class, org.bukkit.craftbukkit.block.impl.CraftSculkSensor::new);
|
||||
register(net.minecraft.world.level.block.SculkShriekerBlock.class, org.bukkit.craftbukkit.block.impl.CraftSculkShrieker::new);
|
||||
@@ -517,9 +518,15 @@ public class CraftBlockData implements BlockData {
|
||||
register(net.minecraft.world.level.block.SnifferEggBlock.class, org.bukkit.craftbukkit.block.impl.CraftSnifferEgg::new);
|
||||
register(net.minecraft.world.level.block.TallSeagrassBlock.class, org.bukkit.craftbukkit.block.impl.CraftTallSeagrass::new);
|
||||
register(net.minecraft.world.level.block.TorchflowerCropBlock.class, org.bukkit.craftbukkit.block.impl.CraftTorchflowerCrop::new);
|
||||
register(net.minecraft.world.level.block.TrialSpawnerBlock.class, org.bukkit.craftbukkit.block.impl.CraftTrialSpawner::new);
|
||||
register(net.minecraft.world.level.block.WallHangingSignBlock.class, org.bukkit.craftbukkit.block.impl.CraftWallHangingSign::new);
|
||||
register(net.minecraft.world.level.block.WaterloggedTransparentBlock.class, org.bukkit.craftbukkit.block.impl.CraftWaterloggedTransparent::new);
|
||||
register(net.minecraft.world.level.block.WeatheringCopperBulbBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperBulb::new);
|
||||
register(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperDoor::new);
|
||||
register(net.minecraft.world.level.block.WeatheringCopperGrateBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperGrate::new);
|
||||
register(net.minecraft.world.level.block.WeatheringCopperSlabBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperSlab::new);
|
||||
register(net.minecraft.world.level.block.WeatheringCopperStairBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperStair::new);
|
||||
register(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, org.bukkit.craftbukkit.block.impl.CraftWeatheringCopperTrapDoor::new);
|
||||
register(net.minecraft.world.level.block.piston.BlockPiston.class, org.bukkit.craftbukkit.block.impl.CraftPiston::new);
|
||||
register(net.minecraft.world.level.block.piston.BlockPistonExtension.class, org.bukkit.craftbukkit.block.impl.CraftPistonExtension::new);
|
||||
register(net.minecraft.world.level.block.piston.BlockPistonMoving.class, org.bukkit.craftbukkit.block.impl.CraftPistonMoving::new);
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package org.bukkit.craftbukkit.block.data.type;
|
||||
|
||||
import org.bukkit.block.data.type.Crafter;
|
||||
import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
||||
|
||||
public abstract class CraftCrafter extends CraftBlockData implements Crafter {
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean CRAFTING = getBoolean("crafting");
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean TRIGGERED = getBoolean("triggered");
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> ORIENTATION = getEnum("orientation");
|
||||
|
||||
@Override
|
||||
public boolean isCrafting() {
|
||||
return get(CRAFTING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCrafting(boolean crafting) {
|
||||
set(CRAFTING, crafting);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggered() {
|
||||
return get(TRIGGERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTriggered(boolean triggered) {
|
||||
set(TRIGGERED, triggered);
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.type.Crafter.Orientation getOrientation() {
|
||||
return get(ORIENTATION, org.bukkit.block.data.type.Crafter.Orientation.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOrientation(org.bukkit.block.data.type.Crafter.Orientation orientation) {
|
||||
set(ORIENTATION, orientation);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.bukkit.craftbukkit.block.data.type;
|
||||
|
||||
import org.bukkit.block.data.type.TrialSpawner;
|
||||
import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
||||
|
||||
public abstract class CraftTrialSpawner extends CraftBlockData implements TrialSpawner {
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> TRIAL_SPAWNER_STATE = getEnum("trial_spawner_state");
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.type.TrialSpawner.State getTrialSpawnerState() {
|
||||
return get(TRIAL_SPAWNER_STATE, org.bukkit.block.data.type.TrialSpawner.State.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTrialSpawnerState(org.bukkit.block.data.type.TrialSpawner.State state) {
|
||||
set(TRIAL_SPAWNER_STATE, state);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftCopperBulb extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CopperBulb, org.bukkit.block.data.Lightable, org.bukkit.block.data.Powerable {
|
||||
|
||||
public CraftCopperBulb() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftCopperBulb(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftLightable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean LIT = getBoolean(net.minecraft.world.level.block.CopperBulbBlock.class, "lit");
|
||||
|
||||
@Override
|
||||
public boolean isLit() {
|
||||
return get(LIT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLit(boolean lit) {
|
||||
set(LIT, lit);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftPowerable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean POWERED = getBoolean(net.minecraft.world.level.block.CopperBulbBlock.class, "powered");
|
||||
|
||||
@Override
|
||||
public boolean isPowered() {
|
||||
return get(POWERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPowered(boolean powered) {
|
||||
set(POWERED, powered);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftCrafter extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Crafter {
|
||||
|
||||
public CraftCrafter() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftCrafter(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.type.CraftCrafter
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean CRAFTING = getBoolean(net.minecraft.world.level.block.CrafterBlock.class, "crafting");
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean TRIGGERED = getBoolean(net.minecraft.world.level.block.CrafterBlock.class, "triggered");
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> ORIENTATION = getEnum(net.minecraft.world.level.block.CrafterBlock.class, "orientation");
|
||||
|
||||
@Override
|
||||
public boolean isCrafting() {
|
||||
return get(CRAFTING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCrafting(boolean crafting) {
|
||||
set(CRAFTING, crafting);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTriggered() {
|
||||
return get(TRIGGERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTriggered(boolean triggered) {
|
||||
set(TRIGGERED, triggered);
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.type.Crafter.Orientation getOrientation() {
|
||||
return get(ORIENTATION, org.bukkit.block.data.type.Crafter.Orientation.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOrientation(org.bukkit.block.data.type.Crafter.Orientation orientation) {
|
||||
set(ORIENTATION, orientation);
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftPowderSnowCauldron extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Levelled {
|
||||
|
||||
public CraftPowderSnowCauldron() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftPowderSnowCauldron(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftLevelled
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateInteger LEVEL = getInteger(net.minecraft.world.level.block.PowderSnowCauldronBlock.class, "level");
|
||||
|
||||
@Override
|
||||
public int getLevel() {
|
||||
return get(LEVEL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLevel(int level) {
|
||||
set(LEVEL, level);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaximumLevel() {
|
||||
return getMax(LEVEL);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftTrialSpawner extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TrialSpawner {
|
||||
|
||||
public CraftTrialSpawner() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftTrialSpawner(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.type.CraftTrialSpawner
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> TRIAL_SPAWNER_STATE = getEnum(net.minecraft.world.level.block.TrialSpawnerBlock.class, "trial_spawner_state");
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.type.TrialSpawner.State getTrialSpawnerState() {
|
||||
return get(TRIAL_SPAWNER_STATE, org.bukkit.block.data.type.TrialSpawner.State.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTrialSpawnerState(org.bukkit.block.data.type.TrialSpawner.State state) {
|
||||
set(TRIAL_SPAWNER_STATE, state);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftWaterloggedTransparent extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
|
||||
|
||||
public CraftWaterloggedTransparent() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftWaterloggedTransparent(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftWaterlogged
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean WATERLOGGED = getBoolean(net.minecraft.world.level.block.WaterloggedTransparentBlock.class, "waterlogged");
|
||||
|
||||
@Override
|
||||
public boolean isWaterlogged() {
|
||||
return get(WATERLOGGED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWaterlogged(boolean waterlogged) {
|
||||
set(WATERLOGGED, waterlogged);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftWeatheringCopperBulb extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.CopperBulb, org.bukkit.block.data.Lightable, org.bukkit.block.data.Powerable {
|
||||
|
||||
public CraftWeatheringCopperBulb() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftWeatheringCopperBulb(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftLightable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean LIT = getBoolean(net.minecraft.world.level.block.WeatheringCopperBulbBlock.class, "lit");
|
||||
|
||||
@Override
|
||||
public boolean isLit() {
|
||||
return get(LIT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLit(boolean lit) {
|
||||
set(LIT, lit);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftPowerable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean POWERED = getBoolean(net.minecraft.world.level.block.WeatheringCopperBulbBlock.class, "powered");
|
||||
|
||||
@Override
|
||||
public boolean isPowered() {
|
||||
return get(POWERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPowered(boolean powered) {
|
||||
set(POWERED, powered);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftWeatheringCopperDoor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.Door, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable, org.bukkit.block.data.Powerable {
|
||||
|
||||
public CraftWeatheringCopperDoor() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftWeatheringCopperDoor(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.type.CraftDoor
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> HINGE = getEnum(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "hinge");
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.type.Door.Hinge getHinge() {
|
||||
return get(HINGE, org.bukkit.block.data.type.Door.Hinge.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHinge(org.bukkit.block.data.type.Door.Hinge hinge) {
|
||||
set(HINGE, hinge);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftBisected
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> HALF = getEnum(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "half");
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.Bisected.Half getHalf() {
|
||||
return get(HALF, org.bukkit.block.data.Bisected.Half.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHalf(org.bukkit.block.data.Bisected.Half half) {
|
||||
set(HALF, half);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftDirectional
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> FACING = getEnum(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "facing");
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.BlockFace getFacing() {
|
||||
return get(FACING, org.bukkit.block.BlockFace.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFacing(org.bukkit.block.BlockFace facing) {
|
||||
set(FACING, facing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
|
||||
return getValues(FACING, org.bukkit.block.BlockFace.class);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftOpenable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean OPEN = getBoolean(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "open");
|
||||
|
||||
@Override
|
||||
public boolean isOpen() {
|
||||
return get(OPEN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOpen(boolean open) {
|
||||
set(OPEN, open);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftPowerable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean POWERED = getBoolean(net.minecraft.world.level.block.WeatheringCopperDoorBlock.class, "powered");
|
||||
|
||||
@Override
|
||||
public boolean isPowered() {
|
||||
return get(POWERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPowered(boolean powered) {
|
||||
set(POWERED, powered);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftWeatheringCopperGrate extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.Waterlogged {
|
||||
|
||||
public CraftWeatheringCopperGrate() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftWeatheringCopperGrate(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftWaterlogged
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean WATERLOGGED = getBoolean(net.minecraft.world.level.block.WeatheringCopperGrateBlock.class, "waterlogged");
|
||||
|
||||
@Override
|
||||
public boolean isWaterlogged() {
|
||||
return get(WATERLOGGED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWaterlogged(boolean waterlogged) {
|
||||
set(WATERLOGGED, waterlogged);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
/**
|
||||
* Automatically generated file, changes will be lost.
|
||||
*/
|
||||
package org.bukkit.craftbukkit.block.impl;
|
||||
|
||||
public final class CraftWeatheringCopperTrapDoor extends org.bukkit.craftbukkit.block.data.CraftBlockData implements org.bukkit.block.data.type.TrapDoor, org.bukkit.block.data.Bisected, org.bukkit.block.data.Directional, org.bukkit.block.data.Openable, org.bukkit.block.data.Powerable, org.bukkit.block.data.Waterlogged {
|
||||
|
||||
public CraftWeatheringCopperTrapDoor() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CraftWeatheringCopperTrapDoor(net.minecraft.world.level.block.state.IBlockData state) {
|
||||
super(state);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftBisected
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> HALF = getEnum(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "half");
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.data.Bisected.Half getHalf() {
|
||||
return get(HALF, org.bukkit.block.data.Bisected.Half.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHalf(org.bukkit.block.data.Bisected.Half half) {
|
||||
set(HALF, half);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftDirectional
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateEnum<?> FACING = getEnum(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "facing");
|
||||
|
||||
@Override
|
||||
public org.bukkit.block.BlockFace getFacing() {
|
||||
return get(FACING, org.bukkit.block.BlockFace.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFacing(org.bukkit.block.BlockFace facing) {
|
||||
set(FACING, facing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
|
||||
return getValues(FACING, org.bukkit.block.BlockFace.class);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftOpenable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean OPEN = getBoolean(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "open");
|
||||
|
||||
@Override
|
||||
public boolean isOpen() {
|
||||
return get(OPEN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOpen(boolean open) {
|
||||
set(OPEN, open);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftPowerable
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean POWERED = getBoolean(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "powered");
|
||||
|
||||
@Override
|
||||
public boolean isPowered() {
|
||||
return get(POWERED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPowered(boolean powered) {
|
||||
set(POWERED, powered);
|
||||
}
|
||||
|
||||
// org.bukkit.craftbukkit.block.data.CraftWaterlogged
|
||||
|
||||
private static final net.minecraft.world.level.block.state.properties.BlockStateBoolean WATERLOGGED = getBoolean(net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock.class, "waterlogged");
|
||||
|
||||
@Override
|
||||
public boolean isWaterlogged() {
|
||||
return get(WATERLOGGED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWaterlogged(boolean waterlogged) {
|
||||
set(WATERLOGGED, waterlogged);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.Breeze;
|
||||
|
||||
public class CraftBreeze extends CraftMonster implements Breeze {
|
||||
|
||||
public CraftBreeze(CraftServer server, net.minecraft.world.entity.monster.breeze.Breeze entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public net.minecraft.world.entity.monster.breeze.Breeze getHandle() {
|
||||
return (net.minecraft.world.entity.monster.breeze.Breeze) entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CraftBreeze";
|
||||
}
|
||||
}
|
||||
@@ -122,6 +122,7 @@ import net.minecraft.world.entity.monster.EntityZoglin;
|
||||
import net.minecraft.world.entity.monster.EntityZombie;
|
||||
import net.minecraft.world.entity.monster.EntityZombieHusk;
|
||||
import net.minecraft.world.entity.monster.EntityZombieVillager;
|
||||
import net.minecraft.world.entity.monster.breeze.Breeze;
|
||||
import net.minecraft.world.entity.monster.hoglin.EntityHoglin;
|
||||
import net.minecraft.world.entity.monster.piglin.EntityPiglin;
|
||||
import net.minecraft.world.entity.monster.piglin.EntityPiglinAbstract;
|
||||
@@ -152,6 +153,7 @@ import net.minecraft.world.entity.projectile.EntityThrownExpBottle;
|
||||
import net.minecraft.world.entity.projectile.EntityThrownTrident;
|
||||
import net.minecraft.world.entity.projectile.EntityTippedArrow;
|
||||
import net.minecraft.world.entity.projectile.EntityWitherSkull;
|
||||
import net.minecraft.world.entity.projectile.WindCharge;
|
||||
import net.minecraft.world.entity.vehicle.ChestBoat;
|
||||
import net.minecraft.world.entity.vehicle.EntityBoat;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartAbstract;
|
||||
@@ -334,6 +336,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
}
|
||||
else if (entity instanceof EntityZoglin) { return new CraftZoglin(server, (EntityZoglin) entity); }
|
||||
else if (entity instanceof Warden) { return new CraftWarden(server, (Warden) entity); }
|
||||
else if (entity instanceof Breeze) { return new CraftBreeze(server, (Breeze) entity); }
|
||||
|
||||
else { return new CraftMonster(server, (EntityMonster) entity); }
|
||||
}
|
||||
@@ -401,6 +404,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
else if (entity instanceof EntityLargeFireball) { return new CraftLargeFireball(server, (EntityLargeFireball) entity); }
|
||||
else if (entity instanceof EntityWitherSkull) { return new CraftWitherSkull(server, (EntityWitherSkull) entity); }
|
||||
else if (entity instanceof EntityDragonFireball) { return new CraftDragonFireball(server, (EntityDragonFireball) entity); }
|
||||
else if (entity instanceof WindCharge) { return new CraftWindCharge(server, (WindCharge) entity); }
|
||||
else { return new CraftFireball(server, (EntityFireball) entity); }
|
||||
}
|
||||
else if (entity instanceof EntityEnderSignal) { return new CraftEnderSignal(server, (EntityEnderSignal) entity); }
|
||||
|
||||
@@ -75,7 +75,7 @@ public class CraftItem extends CraftEntity implements Item {
|
||||
|
||||
@Override
|
||||
public void setThrower(UUID uuid) {
|
||||
getHandle().setThrower(uuid);
|
||||
getHandle().thrower = uuid;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -82,6 +82,7 @@ import org.bukkit.entity.ThrownExpBottle;
|
||||
import org.bukkit.entity.ThrownPotion;
|
||||
import org.bukkit.entity.TippedArrow;
|
||||
import org.bukkit.entity.Trident;
|
||||
import org.bukkit.entity.WindCharge;
|
||||
import org.bukkit.entity.WitherSkull;
|
||||
import org.bukkit.entity.memory.MemoryKey;
|
||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
||||
@@ -436,14 +437,14 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
((EntityProjectile) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), 0.0F, 1.5F, 1.0F); // ItemEnderPearl
|
||||
} else if (AbstractArrow.class.isAssignableFrom(projectile)) {
|
||||
if (TippedArrow.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityTippedArrow(world, getHandle());
|
||||
launch = new EntityTippedArrow(world, getHandle(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.ARROW));
|
||||
((Arrow) launch.getBukkitEntity()).setBasePotionData(new PotionData(PotionType.WATER, false, false));
|
||||
} else if (SpectralArrow.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntitySpectralArrow(world, getHandle());
|
||||
launch = new EntitySpectralArrow(world, getHandle(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.SPECTRAL_ARROW));
|
||||
} else if (Trident.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityThrownTrident(world, getHandle(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.TRIDENT));
|
||||
} else {
|
||||
launch = new EntityTippedArrow(world, getHandle());
|
||||
launch = new EntityTippedArrow(world, getHandle(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.ARROW));
|
||||
}
|
||||
((EntityArrow) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), 0.0F, 3.0F, 1.0F); // ItemBow
|
||||
} else if (ThrownPotion.class.isAssignableFrom(projectile)) {
|
||||
@@ -470,6 +471,10 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
launch = new EntityWitherSkull(world, getHandle(), direction.getX(), direction.getY(), direction.getZ());
|
||||
} else if (DragonFireball.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityDragonFireball(world, getHandle(), direction.getX(), direction.getY(), direction.getZ());
|
||||
} else if (WindCharge.class.isAssignableFrom(projectile)) {
|
||||
launch = EntityTypes.WIND_CHARGE.create(world);
|
||||
((net.minecraft.world.entity.projectile.WindCharge) launch).setOwner(getHandle());
|
||||
((net.minecraft.world.entity.projectile.WindCharge) launch).setDirection(direction.getX(), direction.getY(), direction.getZ());
|
||||
} else {
|
||||
launch = new EntityLargeFireball(world, getHandle(), direction.getX(), direction.getY(), direction.getZ(), 1);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.lang.ref.WeakReference;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
@@ -42,7 +43,7 @@ import net.minecraft.network.chat.IChatBaseComponent;
|
||||
import net.minecraft.network.chat.PlayerChatMessage;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
|
||||
import net.minecraft.network.protocol.common.ClientboundResourcePackPacket;
|
||||
import net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.network.protocol.game.ClientboundClearTitlesPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundCustomChatCompletionsPacket;
|
||||
@@ -1718,12 +1719,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
public void setResourcePack(String url, byte[] hash, String prompt, boolean force) {
|
||||
Preconditions.checkArgument(url != null, "Resource pack URL cannot be null");
|
||||
|
||||
setResourcePack(UUID.nameUUIDFromBytes(url.getBytes(StandardCharsets.UTF_8)), url, hash, prompt, force);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setResourcePack(UUID id, String url, byte[] hash, String prompt, boolean force) {
|
||||
Preconditions.checkArgument(url != null, "Resource pack URL cannot be null");
|
||||
|
||||
if (hash != null) {
|
||||
Preconditions.checkArgument(hash.length == 20, "Resource pack hash should be 20 bytes long but was %s", hash.length);
|
||||
|
||||
getHandle().connection.send(new ClientboundResourcePackPacket(url, BaseEncoding.base16().lowerCase().encode(hash), force, CraftChatMessage.fromStringOrNull(prompt, true)));
|
||||
getHandle().connection.send(new ClientboundResourcePackPushPacket(id, url, BaseEncoding.base16().lowerCase().encode(hash), force, CraftChatMessage.fromStringOrNull(prompt, true)));
|
||||
} else {
|
||||
getHandle().connection.send(new ClientboundResourcePackPacket(url, "", force, CraftChatMessage.fromStringOrNull(prompt, true)));
|
||||
getHandle().connection.send(new ClientboundResourcePackPushPacket(id, url, "", force, CraftChatMessage.fromStringOrNull(prompt, true)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,12 +19,12 @@ public class CraftTrident extends CraftArrow implements Trident {
|
||||
|
||||
@Override
|
||||
public ItemStack getItem() {
|
||||
return CraftItemStack.asBukkitCopy(getHandle().tridentItem);
|
||||
return CraftItemStack.asBukkitCopy(getHandle().pickupItemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItem(ItemStack itemStack) {
|
||||
getHandle().tridentItem = CraftItemStack.asNMSCopy(itemStack);
|
||||
getHandle().pickupItemStack = CraftItemStack.asNMSCopy(itemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.WindCharge;
|
||||
|
||||
public class CraftWindCharge extends CraftFireball implements WindCharge {
|
||||
public CraftWindCharge(CraftServer server, net.minecraft.world.entity.projectile.WindCharge entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CraftWindCharge";
|
||||
}
|
||||
}
|
||||
@@ -1466,11 +1466,10 @@ public class CraftEventFactory {
|
||||
return event;
|
||||
}
|
||||
|
||||
public static BlockIgniteEvent callBlockIgniteEvent(World world, int x, int y, int z, Explosion explosion) {
|
||||
org.bukkit.World bukkitWorld = world.getWorld();
|
||||
public static BlockIgniteEvent callBlockIgniteEvent(World world, BlockPosition blockposition, Explosion explosion) {
|
||||
org.bukkit.entity.Entity igniter = explosion.source == null ? null : explosion.source.getBukkitEntity();
|
||||
|
||||
BlockIgniteEvent event = new BlockIgniteEvent(bukkitWorld.getBlockAt(x, y, z), IgniteCause.EXPLOSION, igniter);
|
||||
BlockIgniteEvent event = new BlockIgniteEvent(CraftBlock.at(world, blockposition), IgniteCause.EXPLOSION, igniter);
|
||||
world.getCraftServer().getPluginManager().callEvent(event);
|
||||
return event;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import net.minecraft.world.inventory.ContainerSmoker;
|
||||
import net.minecraft.world.inventory.ContainerStonecutter;
|
||||
import net.minecraft.world.inventory.ContainerWorkbench;
|
||||
import net.minecraft.world.inventory.Containers;
|
||||
import net.minecraft.world.inventory.CrafterMenu;
|
||||
import net.minecraft.world.inventory.Slot;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
@@ -161,6 +162,8 @@ public class CraftContainer extends Container {
|
||||
case CRAFTING:
|
||||
case MERCHANT:
|
||||
throw new IllegalArgumentException("Can't open a " + inventory.getType() + " inventory!");
|
||||
case CRAFTER:
|
||||
return Containers.CRAFTER_3x3;
|
||||
default:
|
||||
// TODO: If it reaches the default case, should we throw an error?
|
||||
return Containers.GENERIC_9x3;
|
||||
@@ -235,6 +238,9 @@ public class CraftContainer extends Container {
|
||||
case SMITHING_NEW:
|
||||
setupSmithing(top, bottom); // SPIGOT-6783 - manually set up slots so we can use the delegated inventory and not the automatically created one
|
||||
break;
|
||||
case CRAFTER:
|
||||
delegate = new CrafterMenu(windowId, bottom);
|
||||
break;
|
||||
}
|
||||
|
||||
if (delegate != null) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import net.minecraft.world.inventory.InventoryEnderChest;
|
||||
import net.minecraft.world.inventory.InventoryMerchant;
|
||||
import net.minecraft.world.level.block.BlockComposter;
|
||||
import net.minecraft.world.level.block.entity.ChiseledBookShelfBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.CrafterBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.IHopper;
|
||||
import net.minecraft.world.level.block.entity.TileEntityBarrel;
|
||||
import net.minecraft.world.level.block.entity.TileEntityBlastFurnace;
|
||||
@@ -454,7 +455,11 @@ public class CraftInventory implements Inventory {
|
||||
public InventoryType getType() {
|
||||
// Thanks to Droppers extending Dispensers, Blast Furnaces & Smokers extending Furnace, order is important.
|
||||
if (inventory instanceof InventoryCrafting) {
|
||||
return inventory.getContainerSize() >= 9 ? InventoryType.WORKBENCH : InventoryType.CRAFTING;
|
||||
if (inventory instanceof CrafterBlockEntity) {
|
||||
return InventoryType.CRAFTER;
|
||||
} else {
|
||||
return inventory.getContainerSize() >= 9 ? InventoryType.WORKBENCH : InventoryType.CRAFTING;
|
||||
}
|
||||
} else if (inventory instanceof PlayerInventory) {
|
||||
return InventoryType.PLAYER;
|
||||
} else if (inventory instanceof TileEntityDropper) {
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.bukkit.craftbukkit.inventory;
|
||||
|
||||
import net.minecraft.world.IInventory;
|
||||
import org.bukkit.inventory.CrafterInventory;
|
||||
|
||||
public class CraftInventoryCrafter extends CraftResultInventory implements CrafterInventory {
|
||||
|
||||
public CraftInventoryCrafter(IInventory inventory, IInventory resultInventory) {
|
||||
super(inventory, resultInventory);
|
||||
}
|
||||
}
|
||||
@@ -169,6 +169,7 @@ public final class CraftItemFactory implements ItemFactory {
|
||||
case BAT_SPAWN_EGG:
|
||||
case BEE_SPAWN_EGG:
|
||||
case BLAZE_SPAWN_EGG:
|
||||
case BREEZE_SPAWN_EGG:
|
||||
case CAT_SPAWN_EGG:
|
||||
case CAMEL_SPAWN_EGG:
|
||||
case CAVE_SPIDER_SPAWN_EGG:
|
||||
@@ -344,6 +345,8 @@ public final class CraftItemFactory implements ItemFactory {
|
||||
case DECORATED_POT:
|
||||
case SUSPICIOUS_SAND:
|
||||
case SUSPICIOUS_GRAVEL:
|
||||
case CRAFTER:
|
||||
case TRIAL_SPAWNER:
|
||||
return new CraftMetaBlockState(meta, material);
|
||||
case TROPICAL_FISH_BUCKET:
|
||||
return meta instanceof CraftMetaTropicalFishBucket ? meta : new CraftMetaTropicalFishBucket(meta);
|
||||
|
||||
@@ -422,6 +422,7 @@ public final class CraftItemStack extends ItemStack {
|
||||
case BAT_SPAWN_EGG:
|
||||
case BEE_SPAWN_EGG:
|
||||
case BLAZE_SPAWN_EGG:
|
||||
case BREEZE_SPAWN_EGG:
|
||||
case CAT_SPAWN_EGG:
|
||||
case CAMEL_SPAWN_EGG:
|
||||
case CAVE_SPIDER_SPAWN_EGG:
|
||||
@@ -597,6 +598,8 @@ public final class CraftItemStack extends ItemStack {
|
||||
case DECORATED_POT:
|
||||
case SUSPICIOUS_SAND:
|
||||
case SUSPICIOUS_GRAVEL:
|
||||
case CRAFTER:
|
||||
case TRIAL_SPAWNER:
|
||||
return new CraftMetaBlockState(item.getTag(), CraftMagicNumbers.getMaterial(item.getItem()));
|
||||
case TROPICAL_FISH_BUCKET:
|
||||
return new CraftMetaTropicalFishBucket(item.getTag());
|
||||
|
||||
@@ -121,7 +121,9 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
|
||||
Material.CHISELED_BOOKSHELF,
|
||||
Material.DECORATED_POT,
|
||||
Material.SUSPICIOUS_SAND,
|
||||
Material.SUSPICIOUS_GRAVEL
|
||||
Material.SUSPICIOUS_GRAVEL,
|
||||
Material.TRIAL_SPAWNER,
|
||||
Material.CRAFTER
|
||||
);
|
||||
|
||||
static {
|
||||
|
||||
@@ -39,6 +39,7 @@ import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTCompressedStreamTools;
|
||||
import net.minecraft.nbt.NBTReadLimiter;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
@@ -521,7 +522,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||
if (internal != null) {
|
||||
ByteArrayInputStream buf = new ByteArrayInputStream(Base64.getDecoder().decode(internal));
|
||||
try {
|
||||
internalTag = NBTCompressedStreamTools.readCompressed(buf);
|
||||
internalTag = NBTCompressedStreamTools.readCompressed(buf, NBTReadLimiter.unlimitedHeap());
|
||||
deserializeInternal(internalTag, map);
|
||||
Set<String> keys = internalTag.getAllKeys();
|
||||
for (String key : keys) {
|
||||
|
||||
@@ -26,6 +26,7 @@ public class CraftMetaSpawnEgg extends CraftMetaItem implements SpawnEggMeta {
|
||||
Material.BAT_SPAWN_EGG,
|
||||
Material.BEE_SPAWN_EGG,
|
||||
Material.BLAZE_SPAWN_EGG,
|
||||
Material.BREEZE_SPAWN_EGG,
|
||||
Material.CAT_SPAWN_EGG,
|
||||
Material.CAMEL_SPAWN_EGG,
|
||||
Material.CAVE_SPIDER_SPAWN_EGG,
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package org.bukkit.craftbukkit.inventory;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import java.util.Map;
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.world.item.crafting.RecipeHolder;
|
||||
import net.minecraft.world.item.crafting.RecipeItemStack;
|
||||
import net.minecraft.world.item.crafting.ShapedRecipePattern;
|
||||
import net.minecraft.world.item.crafting.ShapedRecipes;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
@@ -48,15 +50,8 @@ public class CraftShapedRecipe extends ShapedRecipe implements CraftRecipe {
|
||||
public void addToCraftingManager() {
|
||||
String[] shape = this.getShape();
|
||||
Map<Character, org.bukkit.inventory.RecipeChoice> ingred = this.getChoiceMap();
|
||||
int width = shape[0].length();
|
||||
NonNullList<RecipeItemStack> data = NonNullList.withSize(shape.length * width, RecipeItemStack.EMPTY);
|
||||
Map<Character, RecipeItemStack> data = Maps.transformValues(ingred, (bukkit) -> toNMS(bukkit, false));
|
||||
|
||||
for (int i = 0; i < shape.length; i++) {
|
||||
String row = shape[i];
|
||||
for (int j = 0; j < row.length(); j++) {
|
||||
data.set(i * width + j, toNMS(ingred.get(row.charAt(j)), false));
|
||||
}
|
||||
}
|
||||
MinecraftServer.getServer().getRecipeManager().addRecipe(new RecipeHolder<>(CraftNamespacedKey.toMinecraft(this.getKey()), new ShapedRecipes(this.getGroup(), CraftRecipe.getCategory(this.getCategory()), width, shape.length, data, CraftItemStack.asNMSCopy(this.getResult()))));
|
||||
MinecraftServer.getServer().getRecipeManager().addRecipe(new RecipeHolder<>(CraftNamespacedKey.toMinecraft(this.getKey()), new ShapedRecipes(this.getGroup(), CraftRecipe.getCategory(this.getCategory()), ShapedRecipePattern.of(data, shape), CraftItemStack.asNMSCopy(this.getResult()))));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ public final class CraftInventoryCreator {
|
||||
converterMap.put(InventoryType.GRINDSTONE, DEFAULT_CONVERTER);
|
||||
converterMap.put(InventoryType.STONECUTTER, DEFAULT_CONVERTER);
|
||||
converterMap.put(InventoryType.SMITHING_NEW, DEFAULT_CONVERTER);
|
||||
converterMap.put(InventoryType.CRAFTER, new CraftTileInventoryConverter.Crafter());
|
||||
}
|
||||
|
||||
public Inventory createInventory(InventoryHolder holder, InventoryType type) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.world.IInventory;
|
||||
import net.minecraft.world.level.World;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.entity.CrafterBlockEntity;
|
||||
import net.minecraft.world.level.block.entity.TileEntityBlastFurnace;
|
||||
import net.minecraft.world.level.block.entity.TileEntityBrewingStand;
|
||||
import net.minecraft.world.level.block.entity.TileEntityDispenser;
|
||||
@@ -137,4 +138,12 @@ public abstract class CraftTileInventoryConverter implements CraftInventoryCreat
|
||||
return new TileEntitySmoker(BlockPosition.ZERO, Blocks.SMOKER.defaultBlockState());
|
||||
}
|
||||
}
|
||||
|
||||
public static class Crafter extends CraftTileInventoryConverter {
|
||||
|
||||
@Override
|
||||
public IInventory getTileEntity() {
|
||||
return new CrafterBlockEntity(BlockPosition.ZERO, Blocks.CRAFTER.defaultBlockState());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.google.common.collect.Iterables;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
import com.mojang.authlib.properties.PropertyMap;
|
||||
import com.mojang.authlib.yggdrasil.ProfileResult;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
@@ -13,15 +14,11 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraft.SystemUtils;
|
||||
import net.minecraft.server.dedicated.DedicatedServer;
|
||||
import net.minecraft.world.level.block.entity.TileEntitySkull;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.serialization.SerializableAs;
|
||||
@@ -139,14 +136,9 @@ public final class CraftPlayerProfile implements PlayerProfile {
|
||||
|
||||
// Look up properties such as the textures:
|
||||
if (!profile.getId().equals(SystemUtils.NIL_UUID)) {
|
||||
GameProfile newProfile;
|
||||
try {
|
||||
newProfile = TileEntitySkull.fillProfileTextures(profile).get().orElse(null); // TODO: replace with CompletableFuture
|
||||
} catch (InterruptedException | ExecutionException ex) {
|
||||
throw new RuntimeException("Exception filling profile textures", ex);
|
||||
}
|
||||
ProfileResult newProfile = server.getSessionService().fetchProfile(profile.getId(), true);
|
||||
if (newProfile != null) {
|
||||
profile = newProfile;
|
||||
profile = newProfile.profile();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -91,12 +91,12 @@ public class CraftBlockProjectileSource implements BlockProjectileSource {
|
||||
}
|
||||
} else if (AbstractArrow.class.isAssignableFrom(projectile)) {
|
||||
if (TippedArrow.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityTippedArrow(world, iposition.x(), iposition.y(), iposition.z());
|
||||
launch = new EntityTippedArrow(world, iposition.x(), iposition.y(), iposition.z(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.ARROW));
|
||||
((Arrow) launch.getBukkitEntity()).setBasePotionData(new PotionData(PotionType.WATER, false, false));
|
||||
} else if (SpectralArrow.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntitySpectralArrow(world, iposition.x(), iposition.y(), iposition.z());
|
||||
launch = new EntitySpectralArrow(world, iposition.x(), iposition.y(), iposition.z(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.SPECTRAL_ARROW));
|
||||
} else {
|
||||
launch = new EntityTippedArrow(world, iposition.x(), iposition.y(), iposition.z());
|
||||
launch = new EntityTippedArrow(world, iposition.x(), iposition.y(), iposition.z(), new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.ARROW));
|
||||
}
|
||||
((EntityArrow) launch).pickup = EntityArrow.PickupStatus.ALLOWED;
|
||||
((EntityArrow) launch).projectileSource = this;
|
||||
|
||||
@@ -116,10 +116,9 @@ final class CraftObjective extends CraftScoreboardComponent implements Objective
|
||||
|
||||
@Override
|
||||
public Score getScore(OfflinePlayer player) {
|
||||
Preconditions.checkArgument(player != null, "Player cannot be null");
|
||||
checkState();
|
||||
|
||||
return new CraftScore(this, player.getName());
|
||||
return new CraftScore(this, CraftScoreboard.getScoreHolder(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -128,7 +127,7 @@ final class CraftObjective extends CraftScoreboardComponent implements Objective
|
||||
Preconditions.checkArgument(entry.length() <= Short.MAX_VALUE, "Score '" + entry + "' is longer than the limit of 32767 characters");
|
||||
checkState();
|
||||
|
||||
return new CraftScore(this, entry);
|
||||
return new CraftScore(this, CraftScoreboard.getScoreHolder(entry));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
package org.bukkit.craftbukkit.scoreboard;
|
||||
|
||||
import java.util.Map;
|
||||
import net.minecraft.world.scores.ReadOnlyScoreInfo;
|
||||
import net.minecraft.world.scores.ScoreHolder;
|
||||
import net.minecraft.world.scores.Scoreboard;
|
||||
import net.minecraft.world.scores.ScoreboardObjective;
|
||||
import net.minecraft.world.scores.ScoreboardScore;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.scoreboard.Objective;
|
||||
@@ -16,22 +15,22 @@ import org.bukkit.scoreboard.Score;
|
||||
* Also, as an added perk, a CraftScore will (intentionally) stay a valid reference so long as objective is valid.
|
||||
*/
|
||||
final class CraftScore implements Score {
|
||||
private final String entry;
|
||||
private final ScoreHolder entry;
|
||||
private final CraftObjective objective;
|
||||
|
||||
CraftScore(CraftObjective objective, String entry) {
|
||||
CraftScore(CraftObjective objective, ScoreHolder entry) {
|
||||
this.objective = objective;
|
||||
this.entry = entry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OfflinePlayer getPlayer() {
|
||||
return Bukkit.getOfflinePlayer(entry);
|
||||
return Bukkit.getOfflinePlayer(entry.getScoreboardName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEntry() {
|
||||
return entry;
|
||||
return entry.getScoreboardName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,10 +43,9 @@ final class CraftScore implements Score {
|
||||
Scoreboard board = objective.checkState().board;
|
||||
|
||||
if (board.getTrackedPlayers().contains(entry)) { // Lazy
|
||||
Map<ScoreboardObjective, ScoreboardScore> scores = board.getPlayerScores(entry);
|
||||
ScoreboardScore score = scores.get(objective.getHandle());
|
||||
ReadOnlyScoreInfo score = board.getPlayerScoreInfo(entry, objective.getHandle());
|
||||
if (score != null) { // Lazy
|
||||
return score.getScore();
|
||||
return score.value();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,14 +54,14 @@ final class CraftScore implements Score {
|
||||
|
||||
@Override
|
||||
public void setScore(int score) {
|
||||
objective.checkState().board.getOrCreatePlayerScore(entry, objective.getHandle()).setScore(score);
|
||||
objective.checkState().board.getOrCreatePlayerScore(entry, objective.getHandle()).set(score);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isScoreSet() {
|
||||
Scoreboard board = objective.checkState().board;
|
||||
|
||||
return board.getTrackedPlayers().contains(entry) && board.getPlayerScores(entry).containsKey(objective.getHandle());
|
||||
return board.getTrackedPlayers().contains(entry) && board.getPlayerScoreInfo(entry, objective.getHandle()) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -4,11 +4,13 @@ import com.google.common.base.Function;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import net.minecraft.world.scores.ScoreHolder;
|
||||
import net.minecraft.world.scores.Scoreboard;
|
||||
import net.minecraft.world.scores.ScoreboardObjective;
|
||||
import net.minecraft.world.scores.ScoreboardTeam;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||
import org.bukkit.scoreboard.Criteria;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
@@ -53,7 +55,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
||||
Preconditions.checkArgument(name.length() <= Short.MAX_VALUE, "The name '%s' is longer than the limit of 32767 characters (%s)", name, name.length());
|
||||
Preconditions.checkArgument(board.getObjective(name) == null, "An objective of name '%s' already exists", name);
|
||||
|
||||
ScoreboardObjective objective = board.addObjective(name, ((CraftCriteria) criteria).criteria, CraftChatMessage.fromStringOrNull(displayName), CraftScoreboardTranslations.fromBukkitRender(renderType));
|
||||
ScoreboardObjective objective = board.addObjective(name, ((CraftCriteria) criteria).criteria, CraftChatMessage.fromStringOrNull(displayName), CraftScoreboardTranslations.fromBukkitRender(renderType), true, null);
|
||||
return new CraftObjective(this, objective);
|
||||
}
|
||||
|
||||
@@ -110,13 +112,15 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
||||
|
||||
@Override
|
||||
public ImmutableSet<Score> getScores(OfflinePlayer player) {
|
||||
Preconditions.checkArgument(player != null, "OfflinePlayer cannot be null");
|
||||
|
||||
return getScores(player.getName());
|
||||
return getScores(getScoreHolder(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableSet<Score> getScores(String entry) {
|
||||
return getScores(getScoreHolder(entry));
|
||||
}
|
||||
|
||||
private ImmutableSet<Score> getScores(ScoreHolder entry) {
|
||||
Preconditions.checkArgument(entry != null, "Entry cannot be null");
|
||||
|
||||
ImmutableSet.Builder<Score> scores = ImmutableSet.builder();
|
||||
@@ -128,17 +132,19 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
||||
|
||||
@Override
|
||||
public void resetScores(OfflinePlayer player) {
|
||||
Preconditions.checkArgument(player != null, "OfflinePlayer cannot be null");
|
||||
|
||||
resetScores(player.getName());
|
||||
resetScores(getScoreHolder(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetScores(String entry) {
|
||||
resetScores(getScoreHolder(entry));
|
||||
}
|
||||
|
||||
private void resetScores(ScoreHolder entry) {
|
||||
Preconditions.checkArgument(entry != null, "Entry cannot be null");
|
||||
|
||||
for (ScoreboardObjective objective : this.board.getObjectives()) {
|
||||
board.resetPlayerScore(entry, objective);
|
||||
board.resetSinglePlayerScore(entry, objective);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,4 +214,18 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
||||
public Scoreboard getHandle() {
|
||||
return board;
|
||||
}
|
||||
|
||||
static ScoreHolder getScoreHolder(String entry) {
|
||||
return () -> entry;
|
||||
}
|
||||
|
||||
static ScoreHolder getScoreHolder(OfflinePlayer player) {
|
||||
Preconditions.checkArgument(player != null, "OfflinePlayer cannot be null");
|
||||
|
||||
if (player instanceof CraftPlayer craft) {
|
||||
return craft.getHandle();
|
||||
} else {
|
||||
return getScoreHolder(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,14 +12,14 @@ import net.minecraft.network.protocol.game.PacketPlayOutScoreboardTeam;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.ScoreboardServer;
|
||||
import net.minecraft.server.level.EntityPlayer;
|
||||
import net.minecraft.world.scores.ScoreAccess;
|
||||
import net.minecraft.world.scores.ScoreHolder;
|
||||
import net.minecraft.world.scores.Scoreboard;
|
||||
import net.minecraft.world.scores.ScoreboardObjective;
|
||||
import net.minecraft.world.scores.ScoreboardScore;
|
||||
import net.minecraft.world.scores.ScoreboardTeam;
|
||||
import net.minecraft.world.scores.criteria.IScoreboardCriteria;
|
||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||
import org.bukkit.craftbukkit.util.WeakCollection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.ScoreboardManager;
|
||||
|
||||
public final class CraftScoreboardManager implements ScoreboardManager {
|
||||
@@ -93,15 +93,15 @@ public final class CraftScoreboardManager implements ScoreboardManager {
|
||||
}
|
||||
|
||||
// CraftBukkit method
|
||||
public void removePlayer(Player player) {
|
||||
public void removePlayer(CraftPlayer player) {
|
||||
playerBoards.remove(player);
|
||||
}
|
||||
|
||||
// CraftBukkit method
|
||||
public void getScoreboardScores(IScoreboardCriteria criteria, String name, Consumer<ScoreboardScore> consumer) {
|
||||
public void forAllObjectives(IScoreboardCriteria criteria, ScoreHolder holder, Consumer<ScoreAccess> consumer) {
|
||||
for (CraftScoreboard scoreboard : scoreboards) {
|
||||
Scoreboard board = scoreboard.board;
|
||||
board.forAllObjectives(criteria, name, (score) -> consumer.accept(score));
|
||||
board.forAllObjectives(criteria, holder, (score) -> consumer.accept(score));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,6 +239,9 @@ public class Commodore
|
||||
case "GRASS_PATH":
|
||||
name = "DIRT_PATH";
|
||||
break;
|
||||
case "GRASS":
|
||||
name = "SHORT_GRASS";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ import net.minecraft.network.chat.ChatClickable;
|
||||
import net.minecraft.network.chat.ChatClickable.EnumClickAction;
|
||||
import net.minecraft.network.chat.ChatHexColor;
|
||||
import net.minecraft.network.chat.ChatModifier;
|
||||
import net.minecraft.network.chat.ComponentContents;
|
||||
import net.minecraft.network.chat.IChatBaseComponent;
|
||||
import net.minecraft.network.chat.IChatMutableComponent;
|
||||
import net.minecraft.network.chat.contents.LiteralContents;
|
||||
@@ -89,7 +88,7 @@ public final class CraftChatMessage {
|
||||
hex.append(c);
|
||||
|
||||
if (hex.length() == 7) {
|
||||
modifier = RESET.withColor(ChatHexColor.parseColor(hex.toString()));
|
||||
modifier = RESET.withColor(ChatHexColor.parseColor(hex.toString()).result().get());
|
||||
hex = null;
|
||||
}
|
||||
} else if (format.isFormat() && format != EnumChatFormat.RESET) {
|
||||
@@ -297,7 +296,7 @@ public final class CraftChatMessage {
|
||||
for (IChatBaseComponent c : component) {
|
||||
ChatModifier modi = c.getStyle();
|
||||
ChatHexColor color = modi.getColor();
|
||||
if (c.getContents() != ComponentContents.EMPTY || color != null) {
|
||||
if (c.getContents() != LiteralContents.EMPTY || color != null) {
|
||||
if (color != null) {
|
||||
if (color.format != null) {
|
||||
out.append(color.format);
|
||||
|
||||
@@ -3,17 +3,16 @@ package org.bukkit.craftbukkit.util;
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.io.Files;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.serialization.Dynamic;
|
||||
import com.mojang.serialization.JsonOps;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
@@ -22,8 +21,8 @@ import java.util.Map.Entry;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import net.minecraft.SharedConstants;
|
||||
import net.minecraft.SystemUtils;
|
||||
import net.minecraft.advancements.AdvancementHolder;
|
||||
import net.minecraft.advancements.critereon.LootDeserializationContext;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.nbt.DynamicOpsNBT;
|
||||
@@ -34,7 +33,6 @@ import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import net.minecraft.server.AdvancementDataWorld;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.ChatDeserializer;
|
||||
import net.minecraft.util.datafix.DataConverterRegistry;
|
||||
import net.minecraft.util.datafix.fixes.DataConverterTypes;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
@@ -225,7 +223,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
||||
* @return string
|
||||
*/
|
||||
public String getMappingsVersion() {
|
||||
return "3478a65bfd04b15b431fe107b3617dfc";
|
||||
return "60a2bb6bf2684dc61c56b90d7c41bddc";
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -258,8 +256,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
||||
MinecraftKey minecraftkey = CraftNamespacedKey.toMinecraft(key);
|
||||
|
||||
JsonElement jsonelement = AdvancementDataWorld.GSON.fromJson(advancement, JsonElement.class);
|
||||
JsonObject jsonobject = ChatDeserializer.convertToJsonObject(jsonelement, "advancement");
|
||||
net.minecraft.advancements.Advancement nms = net.minecraft.advancements.Advancement.fromJson(jsonobject, new LootDeserializationContext(minecraftkey, MinecraftServer.getServer().getLootData()));
|
||||
net.minecraft.advancements.Advancement nms = SystemUtils.getOrThrow(net.minecraft.advancements.Advancement.CODEC.parse(JsonOps.INSTANCE, jsonelement), JsonParseException::new);
|
||||
if (nms != null) {
|
||||
MinecraftServer.getServer().getAdvancements().advancements.put(minecraftkey, new AdvancementHolder(minecraftkey, nms));
|
||||
Advancement bukkit = Bukkit.getAdvancement(key);
|
||||
|
||||
@@ -4,9 +4,10 @@ import static org.junit.jupiter.api.Assertions.*;
|
||||
import net.minecraft.EnumChatFormat;
|
||||
import net.minecraft.network.chat.IChatBaseComponent;
|
||||
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||
import org.bukkit.support.AbstractTestingBase;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class ChatTest {
|
||||
public class ChatTest extends AbstractTestingBase {
|
||||
|
||||
@Test
|
||||
public void testColors() {
|
||||
@@ -25,15 +26,15 @@ public class ChatTest {
|
||||
public void testURLJsonConversion() {
|
||||
IChatBaseComponent[] components;
|
||||
components = CraftChatMessage.fromString("https://spigotmc.org/test Test Message");
|
||||
assertEquals("{\"extra\":[{\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://spigotmc.org/test\"},\"text\":\"https://spigotmc.org/test\"},{\"text\":\" Test Message\"}],\"text\":\"\"}",
|
||||
assertEquals("{\"text\":\"\",\"extra\":[{\"text\":\"https://spigotmc.org/test\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://spigotmc.org/test\"}},\" Test Message\"]}",
|
||||
CraftChatMessage.toJSON(components[0]));
|
||||
|
||||
components = CraftChatMessage.fromString("123 " + ChatColor.GOLD + "https://spigotmc.org " + ChatColor.BOLD + "test");
|
||||
assertEquals("{\"extra\":[{\"text\":\"123 \"},{\"bold\":false,\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"obfuscated\":false,\"color\":\"gold\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://spigotmc.org\"},\"text\":\"https://spigotmc.org\"},{\"bold\":false,\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"obfuscated\":false,\"color\":\"gold\",\"text\":\" \"},{\"bold\":true,\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"obfuscated\":false,\"color\":\"gold\",\"text\":\"test\"}],\"text\":\"\"}",
|
||||
assertEquals("{\"text\":\"\",\"extra\":[\"123 \",{\"text\":\"https://spigotmc.org\",\"obfuscated\":false,\"clickEvent\":{\"action\":\"open_url\",\"value\":\"https://spigotmc.org\"},\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"color\":\"gold\",\"bold\":false},{\"text\":\" \",\"obfuscated\":false,\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"color\":\"gold\",\"bold\":false},{\"text\":\"test\",\"obfuscated\":false,\"italic\":false,\"underlined\":false,\"strikethrough\":false,\"color\":\"gold\",\"bold\":true}]}",
|
||||
CraftChatMessage.toJSON(components[0]));
|
||||
|
||||
components = CraftChatMessage.fromString("multiCase http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE");
|
||||
assertEquals("{\"extra\":[{\"text\":\"multiCase \"},{\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\"},\"text\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\"}],\"text\":\"\"}",
|
||||
assertEquals("{\"text\":\"\",\"extra\":[\"multiCase \",{\"text\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http://SpigotMC.ORg/SpOngeBobMeEMeGoESHeRE\"}}]}",
|
||||
CraftChatMessage.toJSON(components[0]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ public class CompositeSerialization extends AbstractTestingBase {
|
||||
|
||||
List<ItemStack> stacks = new ArrayList<ItemStack>();
|
||||
stacks.add(new ItemStack(Material.STONE));
|
||||
stacks.add(new ItemStack(Material.GRASS));
|
||||
stacks.add(new ItemStack(Material.SHORT_GRASS));
|
||||
stacks.add(new ItemStack(Material.DIRT));
|
||||
stacks.add(new ItemStack(Material.COBBLESTONE, 17));
|
||||
stacks.add(new ItemStack(Material.OAK_PLANKS, 63));
|
||||
|
||||
@@ -111,6 +111,15 @@ public class LegacyTest extends AbstractTestingBase {
|
||||
Material.SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE, Material.RAISER_ARMOR_TRIM_SMITHING_TEMPLATE, Material.HOST_ARMOR_TRIM_SMITHING_TEMPLATE, Material.ANGLER_POTTERY_SHERD, Material.ARCHER_POTTERY_SHERD, Material.ARMS_UP_POTTERY_SHERD, Material.BLADE_POTTERY_SHERD,
|
||||
Material.BREWER_POTTERY_SHERD, Material.BURN_POTTERY_SHERD, Material.DANGER_POTTERY_SHERD, Material.EXPLORER_POTTERY_SHERD, Material.FRIEND_POTTERY_SHERD, Material.HEART_POTTERY_SHERD, Material.HEARTBREAK_POTTERY_SHERD, Material.HOWL_POTTERY_SHERD,
|
||||
Material.MINER_POTTERY_SHERD, Material.MOURNER_POTTERY_SHERD, Material.PLENTY_POTTERY_SHERD, Material.PRIZE_POTTERY_SHERD, Material.SHEAF_POTTERY_SHERD, Material.SHELTER_POTTERY_SHERD, Material.SKULL_POTTERY_SHERD, Material.SNORT_POTTERY_SHERD, Material.PITCHER_CROP,
|
||||
// 1.20.3
|
||||
Material.CRAFTER, Material.TUFF_SLAB, Material.TUFF_STAIRS, Material.TUFF_WALL, Material.CHISELED_TUFF, Material.POLISHED_TUFF, Material.POLISHED_TUFF_SLAB, Material.POLISHED_TUFF_STAIRS, Material.POLISHED_TUFF_WALL, Material.TUFF_BRICKS,
|
||||
Material.TUFF_BRICK_SLAB, Material.TUFF_BRICK_STAIRS, Material.TUFF_BRICK_WALL, Material.CHISELED_TUFF_BRICKS, Material.CHISELED_COPPER, Material.EXPOSED_CHISELED_COPPER, Material.WEATHERED_CHISELED_COPPER, Material.OXIDIZED_CHISELED_COPPER,
|
||||
Material.WAXED_CHISELED_COPPER, Material.WAXED_EXPOSED_CHISELED_COPPER, Material.WAXED_WEATHERED_CHISELED_COPPER, Material.WAXED_OXIDIZED_CHISELED_COPPER, Material.COPPER_DOOR, Material.EXPOSED_COPPER_DOOR, Material.WEATHERED_COPPER_DOOR,
|
||||
Material.OXIDIZED_COPPER_DOOR, Material.WAXED_COPPER_DOOR, Material.WAXED_EXPOSED_COPPER_DOOR, Material.WAXED_WEATHERED_COPPER_DOOR, Material.WAXED_OXIDIZED_COPPER_DOOR, Material.COPPER_TRAPDOOR, Material.EXPOSED_COPPER_TRAPDOOR,
|
||||
Material.WEATHERED_COPPER_TRAPDOOR, Material.OXIDIZED_COPPER_TRAPDOOR, Material.WAXED_COPPER_TRAPDOOR, Material.WAXED_EXPOSED_COPPER_TRAPDOOR, Material.WAXED_WEATHERED_COPPER_TRAPDOOR, Material.WAXED_OXIDIZED_COPPER_TRAPDOOR, Material.COPPER_GRATE,
|
||||
Material.EXPOSED_COPPER_GRATE, Material.WEATHERED_COPPER_GRATE, Material.OXIDIZED_COPPER_GRATE, Material.WAXED_COPPER_GRATE, Material.WAXED_EXPOSED_COPPER_GRATE, Material.WAXED_WEATHERED_COPPER_GRATE, Material.WAXED_OXIDIZED_COPPER_GRATE,
|
||||
Material.COPPER_BULB, Material.EXPOSED_COPPER_BULB, Material.WEATHERED_COPPER_BULB, Material.OXIDIZED_COPPER_BULB, Material.WAXED_COPPER_BULB, Material.WAXED_EXPOSED_COPPER_BULB, Material.WAXED_WEATHERED_COPPER_BULB, Material.WAXED_OXIDIZED_COPPER_BULB,
|
||||
Material.BREEZE_SPAWN_EGG, Material.TRIAL_KEY, Material.TRIAL_SPAWNER,
|
||||
//
|
||||
Material.LEGACY_AIR, Material.LEGACY_DEAD_BUSH, Material.LEGACY_BURNING_FURNACE, Material.LEGACY_WALL_SIGN, Material.LEGACY_REDSTONE_TORCH_OFF, Material.LEGACY_SKULL, Material.LEGACY_REDSTONE_COMPARATOR_ON, Material.LEGACY_WALL_BANNER, Material.LEGACY_MONSTER_EGG));
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package org.bukkit.craftbukkit.util;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import net.minecraft.network.chat.ComponentContents;
|
||||
import net.minecraft.network.chat.IChatBaseComponent;
|
||||
import net.minecraft.network.chat.IChatMutableComponent;
|
||||
import net.minecraft.network.chat.contents.LiteralContents;
|
||||
@@ -97,7 +96,7 @@ public class CraftChatMessageTest {
|
||||
|
||||
private boolean containsNonPlainComponent(IChatBaseComponent component) {
|
||||
for (IChatBaseComponent c : component) {
|
||||
if (c.getContents() != ComponentContents.EMPTY && !(c.getContents() instanceof LiteralContents)) {
|
||||
if (c.getContents() != LiteralContents.EMPTY && !(c.getContents() instanceof LiteralContents)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user