Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
698d386c26 | ||
|
|
7cfb1e3826 | ||
|
|
e649c27feb |
|
|
@ -20,7 +20,7 @@ neoForge {
|
|||
accessTransformers.from(at.absolutePath)
|
||||
}
|
||||
parchment {
|
||||
minecraftVersion = parchment_game_version
|
||||
minecraftVersion = minecraft_version
|
||||
mappingsVersion = parchment_version
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ public class CarryOnCommon
|
|||
{
|
||||
String cmd = carry.getActiveScript().get().scriptEffects().commandLoop();
|
||||
if(!cmd.isEmpty())
|
||||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
player.getServer().getCommands().performPrefixedCommand(player.getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().getName() + " run " + cmd);
|
||||
}
|
||||
|
||||
Inventory inv = player.getInventory();
|
||||
|
|
@ -154,7 +154,7 @@ public class CarryOnCommon
|
|||
|
||||
public static void onPlayerAttacked(Player player)
|
||||
{
|
||||
if (Constants.COMMON_CONFIG.settings.dropCarriedWhenHit && !player.level().isClientSide())
|
||||
if (Constants.COMMON_CONFIG.settings.dropCarriedWhenHit && !player.level().isClientSide)
|
||||
{
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
if (carry.isCarrying())
|
||||
|
|
|
|||
|
|
@ -34,11 +34,11 @@ public class CarryOnCommonClient
|
|||
Player player = mc.player;
|
||||
if(player != null) {
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
if ((CarryOnKeybinds.carryKey.isUnbound() ? player.isShiftKeyDown() : (CarryOnKeybinds.carryKey.isDown())) && !carry.isKeyPressed()) {
|
||||
if ((CarryOnKeybinds.carryKey.isUnbound() ? player.isShiftKeyDown() : (CarryOnKeybinds.carryKey.isDown() || checkMouse())) && !carry.isKeyPressed()) {
|
||||
CarryOnKeybinds.onCarryKey(true);
|
||||
carry.setKeyPressed(true);
|
||||
CarryOnDataManager.setCarryData(player, carry);
|
||||
} else if (!(CarryOnKeybinds.carryKey.isUnbound() ? player.isShiftKeyDown() : (CarryOnKeybinds.carryKey.isDown() ) ) && carry.isKeyPressed()) {
|
||||
} else if (!(CarryOnKeybinds.carryKey.isUnbound() ? player.isShiftKeyDown() : (CarryOnKeybinds.carryKey.isDown() || checkMouse()) ) && carry.isKeyPressed()) {
|
||||
CarryOnKeybinds.onCarryKey(false);
|
||||
carry.setKeyPressed(false);
|
||||
CarryOnDataManager.setCarryData(player, carry);
|
||||
|
|
@ -46,16 +46,20 @@ public class CarryOnCommonClient
|
|||
}
|
||||
}
|
||||
|
||||
private static boolean checkMouse()
|
||||
{
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
return (CarryOnKeybinds.carryKey.matchesMouse(0) && mc.mouseHandler.isLeftPressed()) || (CarryOnKeybinds.carryKey.matchesMouse(1) && mc.mouseHandler.isRightPressed()) || (CarryOnKeybinds.carryKey.matchesMouse(3) && mc.mouseHandler.isMiddlePressed());
|
||||
}
|
||||
|
||||
public static void onCarryClientTick() {
|
||||
public static void onCarryClientTick()
|
||||
{
|
||||
Player player = Minecraft.getInstance().player;
|
||||
if (player != null) {
|
||||
if(player != null) {
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
if (carry.isCarrying()) {
|
||||
int wantedSlot = carry.getSelected();
|
||||
if (player.getInventory().getSelectedSlot() != wantedSlot) {
|
||||
player.getInventory().setSelectedSlot(wantedSlot);
|
||||
}
|
||||
if(carry.isCarrying())
|
||||
{
|
||||
player.getInventory().setSelectedSlot(carry.getSelected());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -64,4 +68,4 @@ public class CarryOnCommonClient
|
|||
{
|
||||
return Minecraft.getInstance().player;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
package tschipp.carryon;
|
||||
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import tschipp.carryon.common.config.CarryConfig;
|
||||
|
|
@ -34,10 +34,10 @@ public class Constants {
|
|||
public static final CarryConfig.Common COMMON_CONFIG = new CarryConfig.Common();
|
||||
public static final CarryConfig.Client CLIENT_CONFIG = new CarryConfig.Client();
|
||||
|
||||
public static final Identifier PACKET_ID_KEY_PRESSED = Identifier.fromNamespaceAndPath(Constants.MOD_ID, "key_pressed");
|
||||
public static final Identifier PACKET_ID_START_RIDING = Identifier.fromNamespaceAndPath(Constants.MOD_ID, "start_riding");
|
||||
public static final Identifier PACKET_ID_SYNC_SCRIPTS = Identifier.fromNamespaceAndPath(Constants.MOD_ID, "sync_scripts");
|
||||
public static final Identifier PACKET_ID_START_RIDING_OTHER = Identifier.fromNamespaceAndPath(Constants.MOD_ID, "start_riding_other");
|
||||
public static final Identifier PACKET_ID_SYNC_CARRY_ON_DATA = Identifier.fromNamespaceAndPath(Constants.MOD_ID, "sync_carry_data");
|
||||
public static final ResourceLocation PACKET_ID_KEY_PRESSED = ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "key_pressed");
|
||||
public static final ResourceLocation PACKET_ID_START_RIDING = ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "start_riding");
|
||||
public static final ResourceLocation PACKET_ID_SYNC_SCRIPTS = ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "sync_scripts");
|
||||
public static final ResourceLocation PACKET_ID_START_RIDING_OTHER = ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "start_riding_other");
|
||||
public static final ResourceLocation PACKET_ID_SYNC_CARRY_ON_DATA = ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "sync_carry_data");
|
||||
|
||||
}
|
||||
|
|
@ -22,8 +22,6 @@ package tschipp.carryon.client.keybinds;
|
|||
|
||||
import com.mojang.blaze3d.platform.InputConstants;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.KeyMapping.Category;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import tschipp.carryon.Constants;
|
||||
import tschipp.carryon.networking.serverbound.ServerboundCarryKeyPressedPacket;
|
||||
import tschipp.carryon.platform.Services;
|
||||
|
|
@ -36,9 +34,10 @@ public class CarryOnKeybinds
|
|||
|
||||
public static void registerKeybinds(Consumer<KeyMapping> registrar)
|
||||
{
|
||||
Category category = Category.register(Identifier.fromNamespaceAndPath(Constants.MOD_ID,"key.carry.category"));
|
||||
|
||||
carryKey = new KeyMapping("key.carry.desc", InputConstants.KEY_LSHIFT, category);
|
||||
if(Services.PLATFORM.isModLoaded("amecsapi"))
|
||||
carryKey = new ConflictFreeKeyMapping("key.carry.desc", InputConstants.KEY_LSHIFT, "key.carry.category");
|
||||
else
|
||||
carryKey = new ConflictFreeKeyMapping("key.carry.desc", Services.PLATFORM.getPlatformName().equals("Forge") ? InputConstants.KEY_LSHIFT : InputConstants.UNKNOWN.getValue(), "key.carry.category");
|
||||
|
||||
registrar.accept(carryKey);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* GNU Lesser General Public License v3
|
||||
* Copyright (C) 2024 Tschipp
|
||||
* mrtschipp@gmail.com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package tschipp.carryon.client.keybinds;
|
||||
|
||||
import com.mojang.blaze3d.platform.InputConstants.Type;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
|
||||
public class ConflictFreeKeyMapping extends KeyMapping
|
||||
{
|
||||
public ConflictFreeKeyMapping(String $$0, int $$1, String $$2)
|
||||
{
|
||||
super($$0, $$1, $$2);
|
||||
}
|
||||
|
||||
public ConflictFreeKeyMapping(String $$0, Type $$1, int $$2, String $$3)
|
||||
{
|
||||
super($$0, $$1, $$2, $$3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean same(KeyMapping $$0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -39,13 +39,22 @@ import tschipp.carryon.common.scripting.Matchables.NBTCondition;
|
|||
import javax.annotation.Nullable;
|
||||
import java.util.Map;
|
||||
|
||||
public class ModelOverride {
|
||||
public class ModelOverride
|
||||
{
|
||||
//public static Codec<ModelOverride> CODEC = Codec.STRING.comapFlatMap(ModelOverride::of, override -> override.raw);
|
||||
|
||||
private String raw;
|
||||
private BlockResult parsedBlock;
|
||||
private Type type;
|
||||
private Either<ItemResult, BlockResult> parsedRHS;
|
||||
private Either<ItemStack, BlockState> renderObject;
|
||||
|
||||
private ModelOverride(String raw, BlockResult parsedBlock, Type type, Either<ItemResult, BlockResult> parsedRHS)
|
||||
{
|
||||
this.raw = raw;
|
||||
this.parsedBlock = parsedBlock;
|
||||
this.type = type;
|
||||
this.parsedRHS = parsedRHS;
|
||||
|
||||
parsedRHS.ifLeft(res -> {
|
||||
ItemStack stack = new ItemStack(res.item());
|
||||
|
|
|
|||
|
|
@ -20,42 +20,63 @@
|
|||
|
||||
package tschipp.carryon.client.render;
|
||||
|
||||
import com.mojang.blaze3d.vertex.ByteBufferBuilder;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.math.Axis;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.MultiBufferSource.BufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
|
||||
import net.minecraft.client.renderer.entity.state.EntityRenderState;
|
||||
import net.minecraft.client.renderer.item.ItemStackRenderState;
|
||||
import net.minecraft.client.renderer.rendertype.RenderTypes;
|
||||
import net.minecraft.client.renderer.state.CameraRenderState;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlas;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.HumanoidArm;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemDisplayContext;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.joml.Matrix4f;
|
||||
import tschipp.carryon.Constants;
|
||||
import tschipp.carryon.common.carry.CarryOnData;
|
||||
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
||||
import tschipp.carryon.common.carry.CarryOnDataManager;
|
||||
import tschipp.carryon.common.scripting.CarryOnScript;
|
||||
import tschipp.carryon.common.scripting.CarryOnScript.ScriptRender;
|
||||
import tschipp.carryon.platform.Services;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.SequencedMap;
|
||||
|
||||
public class CarriedObjectRender
|
||||
{
|
||||
public static boolean draw(Player player, PoseStack matrix, int light, float partialTicks,SubmitNodeCollector nodeCollector, boolean firstPerson)
|
||||
|
||||
private static final SequencedMap<RenderType, ByteBufferBuilder> builders = new LinkedHashMap<>(Map.of(
|
||||
RenderType.glint(), new ByteBufferBuilder(RenderType.glint().bufferSize()),
|
||||
RenderType.armorEntityGlint(), new ByteBufferBuilder(RenderType.armorEntityGlint().bufferSize()),
|
||||
RenderType.glintTranslucent(), new ByteBufferBuilder(RenderType.glintTranslucent().bufferSize()),
|
||||
RenderType.entityGlint(), new ByteBufferBuilder(RenderType.entityGlint().bufferSize())
|
||||
//RenderType.entityGlintDirect(), new ByteBufferBuilder(RenderType.entityGlintDirect().bufferSize())
|
||||
));
|
||||
|
||||
|
||||
public static boolean drawFirstPerson(Player player, MultiBufferSource buffer, PoseStack matrix, int light, float partialTicks)
|
||||
{
|
||||
if(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod") || player == null)
|
||||
if(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod"))
|
||||
return false;
|
||||
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
try {
|
||||
if (carry.isCarrying(CarryType.BLOCK))
|
||||
drawBlock(player, matrix, light, CarryRenderHelper.getRenderState(player), nodeCollector, firstPerson, partialTicks);
|
||||
drawFirstPersonBlock(player, buffer, matrix, light, CarryRenderHelper.getRenderState(player));
|
||||
else if (carry.isCarrying(CarryType.ENTITY))
|
||||
drawEntity(player, matrix, light, partialTicks, nodeCollector, firstPerson);
|
||||
drawFirstPersonEntity(player, buffer, matrix, light, partialTicks);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -75,59 +96,194 @@ public class CarriedObjectRender
|
|||
return carry.isCarrying();
|
||||
}
|
||||
|
||||
private static void drawBlock(Player player, PoseStack matrix, int light, BlockState state, SubmitNodeCollector nodeCollector, boolean firstPerson, float partialTicks)
|
||||
private static void drawFirstPersonBlock(Player player, MultiBufferSource buffer, PoseStack matrix, int light, BlockState state)
|
||||
{
|
||||
matrix.pushPose();
|
||||
matrix.scale(2.5f, 2.5f, 2.5f);
|
||||
matrix.translate(0, -0.5, -1);
|
||||
//RenderSystem.enableBlend();
|
||||
//RenderSystem.disableCull();
|
||||
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
ItemStackRenderState renderState = new ItemStackRenderState();
|
||||
var layer = renderState.newLayer();
|
||||
layer.setRenderType(RenderTypes.glint());
|
||||
layer.setRenderType(RenderType.glint());
|
||||
|
||||
matrix.pushPose();
|
||||
if (Constants.CLIENT_CONFIG.facePlayer != CarryRenderHelper.isChest(state.getBlock())) {
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
matrix.mulPose(Axis.XN.rotationDegrees(8));
|
||||
} else {
|
||||
matrix.mulPose(Axis.XP.rotationDegrees(8));
|
||||
}
|
||||
|
||||
PoseStack renderPose = CarryRenderHelper.setupBlockTransformations(player, matrix, carry, firstPerson);
|
||||
if(carry.getActiveScript().isPresent())
|
||||
CarryRenderHelper.performScriptTransformation(matrix, carry.getActiveScript().get());
|
||||
|
||||
//RenderSystem.setShaderTexture(0, GpuTexture);
|
||||
|
||||
ItemStack renderStack = CarryRenderHelper.getRenderItemStack(player);
|
||||
Minecraft.getInstance().getItemModelResolver().updateForTopItem(renderState, renderStack, ItemDisplayContext.NONE, player.level(), null, 0);
|
||||
renderState.submit(renderPose, nodeCollector, light, OverlayTexture.NO_OVERLAY, 0);
|
||||
renderState.render(matrix, buffer, light, OverlayTexture.NO_OVERLAY);
|
||||
|
||||
|
||||
|
||||
//RenderSystem.enableCull();
|
||||
//RenderSystem.disableBlend();
|
||||
matrix.popPose();
|
||||
}
|
||||
|
||||
private static void drawEntity(Player player, PoseStack matrix, int light, float partialTicks,SubmitNodeCollector nodeCollector, boolean firstPerson) {
|
||||
private static void drawFirstPersonEntity(Player player, MultiBufferSource buffer, PoseStack matrix, int light, float partialTicks) {
|
||||
EntityRenderDispatcher manager = Minecraft.getInstance().getEntityRenderDispatcher();
|
||||
|
||||
Entity entity = CarryRenderHelper.getRenderEntity(player);
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
|
||||
if (entity == null)
|
||||
return;
|
||||
if (entity != null)
|
||||
{
|
||||
Vec3 playerpos = CarryRenderHelper.getExactPos(player, partialTicks);
|
||||
|
||||
Vec3 playerpos = CarryRenderHelper.getExactPos(player, partialTicks);
|
||||
entity.setPos(playerpos.x, playerpos.y, playerpos.z);
|
||||
entity.xRotO = 0.0f;
|
||||
entity.yRotO = 0.0f;
|
||||
entity.setYHeadRot(0.0f);
|
||||
|
||||
entity.setPos(playerpos.x, playerpos.y, playerpos.z);
|
||||
entity.xRotO = 0.0f;
|
||||
entity.yRotO = 0.0f;
|
||||
entity.setYHeadRot(0.0f);
|
||||
float height = entity.getBbHeight();
|
||||
float width = entity.getBbWidth();
|
||||
|
||||
matrix.pushPose();
|
||||
matrix.pushPose();
|
||||
matrix.scale(0.8f, 0.8f, 0.8f);
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
matrix.translate(0.0, -height - .2, width * 1.3 + 0.1);
|
||||
|
||||
CarryRenderHelper.setupEntityTransformations(player, matrix, carry, firstPerson);
|
||||
manager.setRenderShadow(false);
|
||||
|
||||
if (entity instanceof LivingEntity)
|
||||
((LivingEntity) entity).hurtTime = 0;
|
||||
Optional<CarryOnScript> res = carry.getActiveScript();
|
||||
if(res.isPresent())
|
||||
{
|
||||
CarryOnScript script = res.get();
|
||||
CarryRenderHelper.performScriptTransformation(matrix, script);
|
||||
}
|
||||
|
||||
try {
|
||||
EntityRenderState renderState = manager.extractEntity(entity, 0);
|
||||
renderState.shadowPieces.clear();
|
||||
renderState.lightCoords = light;
|
||||
manager.submit(renderState, new CameraRenderState(), 0, 0, 0, matrix, nodeCollector);
|
||||
}
|
||||
catch (Exception ignored)
|
||||
{
|
||||
}
|
||||
if(Constants.CLIENT_CONFIG.rotateEntitiesSideways)
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(90));
|
||||
|
||||
matrix.popPose();
|
||||
if(!firstPerson)
|
||||
if (entity instanceof LivingEntity)
|
||||
((LivingEntity) entity).hurtTime = 0;
|
||||
|
||||
try {
|
||||
manager.render(entity, 0, 0, 0, 0f, matrix, buffer, light);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
manager.setRenderShadow(true);
|
||||
matrix.popPose();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// RenderSystem.disableAlphaTest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the third person view of entities and blocks
|
||||
* @param partialticks
|
||||
* @param mat
|
||||
*/
|
||||
public static void drawThirdPerson(float partialticks, Matrix4f mat) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
Level level = mc.level;
|
||||
int light = 0;
|
||||
int perspective = CarryRenderHelper.getPerspective();
|
||||
EntityRenderDispatcher manager = mc.getEntityRenderDispatcher();
|
||||
|
||||
PoseStack matrix = new PoseStack();
|
||||
matrix.mulPose(mat);
|
||||
|
||||
//RenderSystem.enableBlend();
|
||||
//RenderSystem.disableCull();
|
||||
//RenderSystem.disableDepthTest();
|
||||
|
||||
BufferSource buffer = MultiBufferSource.immediateWithBuffers(builders, builders.get(RenderType.glint()));
|
||||
ItemStackRenderState renderState = new ItemStackRenderState();
|
||||
var layer = renderState.newLayer();
|
||||
layer.setRenderType(RenderType.glint());
|
||||
|
||||
for (Player player : level.players())
|
||||
{
|
||||
try {
|
||||
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
|
||||
if (perspective == 0 && player == mc.player && !(Services.PLATFORM.isModLoaded("firstperson") || Services.PLATFORM.isModLoaded("firstpersonmod") || Services.PLATFORM.isModLoaded("realcamera")))
|
||||
continue;
|
||||
|
||||
light = manager.getPackedLightCoords(player, partialticks);
|
||||
|
||||
if (carry.isCarrying(CarryType.BLOCK)) {
|
||||
BlockState state = CarryRenderHelper.getRenderState(player);
|
||||
|
||||
CarryRenderHelper.applyBlockTransformations(player, partialticks, matrix, state.getBlock());
|
||||
|
||||
ItemStack renderItemStack = CarryRenderHelper.getRenderItemStack(player);
|
||||
|
||||
mc.getItemModelResolver().updateForTopItem(renderState, renderItemStack, ItemDisplayContext.NONE, level, null, 0);
|
||||
|
||||
Optional<CarryOnScript> res = carry.getActiveScript();
|
||||
res.ifPresent(script -> CarryRenderHelper.performScriptTransformation(matrix, script));
|
||||
|
||||
//RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS);
|
||||
//RenderSystem.enableCull();
|
||||
|
||||
PoseStack.Pose p = matrix.last();
|
||||
PoseStack copy = new PoseStack();
|
||||
copy.mulPose(p.pose());
|
||||
matrix.popPose();
|
||||
|
||||
//RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
renderState.render(copy, buffer, light, OverlayTexture.NO_OVERLAY);
|
||||
|
||||
matrix.popPose();
|
||||
} else if (carry.isCarrying(CarryType.ENTITY)) {
|
||||
Entity entity = CarryRenderHelper.getRenderEntity(player);
|
||||
|
||||
if (entity != null) {
|
||||
CarryRenderHelper.applyEntityTransformations(player, partialticks, matrix, entity);
|
||||
|
||||
manager.setRenderShadow(false);
|
||||
|
||||
Optional<CarryOnScript> res = carry.getActiveScript();
|
||||
res.ifPresent(script -> CarryRenderHelper.performScriptTransformation(matrix, script));
|
||||
|
||||
if (entity instanceof LivingEntity le)
|
||||
le.hurtTime = 0;
|
||||
|
||||
//RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
manager.render(entity, 0, 0, 0, 0f, matrix, buffer, light);
|
||||
matrix.popPose();
|
||||
manager.setRenderShadow(true);
|
||||
matrix.popPose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
buffer.endLastBatch();
|
||||
|
||||
buffer.endBatch(RenderType.entitySolid(TextureAtlas.LOCATION_BLOCKS));
|
||||
buffer.endBatch(RenderType.entityCutout(TextureAtlas.LOCATION_BLOCKS));
|
||||
buffer.endBatch(RenderType.entityCutoutNoCull(TextureAtlas.LOCATION_BLOCKS));
|
||||
buffer.endBatch(RenderType.entitySmoothCutout(TextureAtlas.LOCATION_BLOCKS));
|
||||
|
||||
//RenderSystem.enableDepthTest();
|
||||
//RenderSystem.enableCull();
|
||||
//RenderSystem.disableBlend();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,111 @@
|
|||
//package tschipp.carryon.client.render;
|
||||
//
|
||||
//import com.mojang.blaze3d.pipeline.BlendFunction;
|
||||
//import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||
//import com.mojang.blaze3d.pipeline.RenderTarget;
|
||||
//import com.mojang.blaze3d.platform.DepthTestFunction;
|
||||
//import com.mojang.blaze3d.vertex.MeshData;
|
||||
//import com.mojang.blaze3d.vertex.VertexFormat;
|
||||
//import net.minecraft.client.renderer.RenderType;
|
||||
//import org.jetbrains.annotations.NotNull;
|
||||
//
|
||||
//import java.util.IdentityHashMap;
|
||||
//import java.util.Map;
|
||||
//
|
||||
////Credit: klikli for the idea and code for this wrapper
|
||||
//public class CarryOnRenderType extends RenderType {
|
||||
//
|
||||
// private static final Map<RenderType, RenderType> remappedTypes = new IdentityHashMap<>();
|
||||
// private final RenderPipeline pipeline;
|
||||
// private final RenderType original;
|
||||
//
|
||||
// private CarryOnRenderType(RenderType original, RenderPipeline pipeline) {
|
||||
// super(String.format("%s_carryon", original.toString()), original.bufferSize(), original.affectsCrumbling(), true, original::setupRenderState, original::clearRenderState);
|
||||
// this.pipeline = pipeline;
|
||||
// this.original = original;
|
||||
// }
|
||||
//
|
||||
// public static RenderType remap(RenderType in) {
|
||||
// return remappedTypes.computeIfAbsent(in, (type) -> {
|
||||
//
|
||||
// //modify the pipeline
|
||||
// var pipeline = toBuilder(in.getRenderPipeline())
|
||||
// .withBlend(BlendFunction.TRANSLUCENT)
|
||||
// .withDepthTestFunction(DepthTestFunction.NO_DEPTH_TEST)
|
||||
// .withCull(false);
|
||||
//
|
||||
// return new CarryOnRenderType(type, pipeline.build());
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// private static RenderPipeline.Builder toBuilder(RenderPipeline pipeline) {
|
||||
// RenderPipeline.Builder builder = RenderPipeline.builder();
|
||||
// builder.withLocation(pipeline.getLocation());
|
||||
// builder.withFragmentShader(pipeline.getFragmentShader());
|
||||
// builder.withVertexShader(pipeline.getVertexShader());
|
||||
//
|
||||
// if (!pipeline.getShaderDefines().isEmpty()) {
|
||||
// for (Map.Entry<String, String> entry : pipeline.getShaderDefines().values().entrySet()) {
|
||||
// try {
|
||||
// int parsed = Integer.parseInt(entry.getValue());
|
||||
// builder.withShaderDefine(entry.getKey(), parsed);
|
||||
// } catch (NumberFormatException e) {
|
||||
// float parsed = Float.parseFloat(entry.getValue());
|
||||
// builder.withShaderDefine(entry.getKey(), parsed);
|
||||
// }
|
||||
// }
|
||||
// for (String flag : pipeline.getShaderDefines().flags()) {
|
||||
// builder.withShaderDefine(flag);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (!pipeline.getSamplers().isEmpty()) {
|
||||
// pipeline.getSamplers().forEach(builder::withSampler);
|
||||
// }
|
||||
//
|
||||
// if (!pipeline.getUniforms().isEmpty()) {
|
||||
// pipeline.getUniforms().forEach(u -> builder.withUniform(u.name(), u.type()));
|
||||
// }
|
||||
//
|
||||
// builder.withDepthTestFunction(pipeline.getDepthTestFunction());
|
||||
// builder.withPolygonMode(pipeline.getPolygonMode());
|
||||
// builder.withCull(pipeline.isCull());
|
||||
// builder.withColorWrite(pipeline.isWriteColor(), pipeline.isWriteAlpha());
|
||||
// builder.withDepthWrite(pipeline.isWriteDepth());
|
||||
// builder.withColorLogic(pipeline.getColorLogic());
|
||||
//
|
||||
// if (pipeline.getBlendFunction().isPresent())
|
||||
// builder.withBlend(pipeline.getBlendFunction().get());
|
||||
// else
|
||||
// builder.withoutBlend();
|
||||
// builder.withVertexFormat(pipeline.getVertexFormat(), pipeline.getVertexFormatMode());
|
||||
// builder.withDepthBias(pipeline.getDepthBiasScaleFactor(), pipeline.getDepthBiasConstant());
|
||||
//
|
||||
// return builder;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void draw(@NotNull MeshData meshData) {
|
||||
// this.original.draw(meshData);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public @NotNull RenderTarget getRenderTarget() {
|
||||
// return this.original.getRenderTarget();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public @NotNull RenderPipeline getRenderPipeline() {
|
||||
// return this.pipeline; //get our own modified pipeline
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public @NotNull VertexFormat format() {
|
||||
// return this.original.format();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public VertexFormat.@NotNull Mode mode() {
|
||||
// return this.original.mode();
|
||||
// }
|
||||
//}
|
||||
|
|
@ -24,6 +24,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||
import com.mojang.math.Axis;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.util.ProblemReporter;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
|
|
@ -33,7 +34,6 @@ import net.minecraft.world.entity.player.Player;
|
|||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.ChestBlock;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.storage.TagValueInput;
|
||||
import net.minecraft.world.level.storage.ValueInput;
|
||||
|
|
@ -74,60 +74,91 @@ public class CarryRenderHelper
|
|||
return Axis.YP.rotationDegrees(getExactBodyRotationDegrees(entity, partialticks));
|
||||
}
|
||||
|
||||
public static void applyGeneralTransformations(Player player, PoseStack matrix)
|
||||
public static void applyGeneralTransformations(Player player, float partialticks, PoseStack matrix)
|
||||
{
|
||||
int perspective = CarryRenderHelper.getPerspective();
|
||||
Quaternionf playerrot = CarryRenderHelper.getExactBodyRotation(player, partialticks);
|
||||
Vec3 playerpos = CarryRenderHelper.getExactPos(player, partialticks);
|
||||
Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition();
|
||||
Vec3 offset = playerpos.subtract(cameraPos);
|
||||
Pose pose = player.getPose();
|
||||
|
||||
matrix.pushPose();
|
||||
matrix.translate(offset.x, offset.y, offset.z);
|
||||
|
||||
if (perspective == 2)
|
||||
playerrot.mul(Axis.YP.rotationDegrees(180));
|
||||
matrix.mulPose(playerrot);
|
||||
|
||||
matrix.pushPose();
|
||||
matrix.scale(0.6f, 0.6f, 0.6f);
|
||||
|
||||
matrix.translate(0, 0, -1.35);
|
||||
if (perspective == 2)
|
||||
matrix.translate(0, 0, -1.35);
|
||||
|
||||
if (doSneakCheck(player))
|
||||
{
|
||||
matrix.translate(0, -0.4, 0);
|
||||
}
|
||||
|
||||
if (pose == Pose.SWIMMING || pose == Pose.FALL_FLYING)
|
||||
if (pose == Pose.SWIMMING)
|
||||
{
|
||||
matrix.translate(0, 0, 2.5);
|
||||
matrix.mulPose(Axis.XP.rotationDegrees(90));
|
||||
}
|
||||
|
||||
matrix.translate(0, -0.5, 0.65);
|
||||
}
|
||||
|
||||
public static PoseStack setupBlockTransformations(Player player, PoseStack matrix, CarryOnData carry, boolean firstPerson) {
|
||||
if (firstPerson) {
|
||||
matrix.scale(2.5f, 2.5f, 2.5f);
|
||||
matrix.translate(0, -0.5, -1);
|
||||
|
||||
if (Constants.CLIENT_CONFIG.facePlayer != CarryRenderHelper.isChest(carry.getBlock().getBlock())) {
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
matrix.mulPose(Axis.XN.rotationDegrees(8));
|
||||
} else {
|
||||
matrix.mulPose(Axis.XP.rotationDegrees(8));
|
||||
float f = player.getSwimAmount(partialticks);
|
||||
float f3 = player.isInWater() ? -90.0F - player.xRotO : -90.0F;
|
||||
float f4 = Mth.lerp(f, 0.0F, f3);
|
||||
if (perspective == 2)
|
||||
{
|
||||
matrix.translate(0, 0, 1.35);
|
||||
matrix.mulPose(Axis.XP.rotationDegrees(f4));
|
||||
}
|
||||
carry.getActiveScript().ifPresent(script -> CarryRenderHelper.performScriptTransformation(matrix, script));
|
||||
else
|
||||
matrix.mulPose(Axis.XN.rotationDegrees(f4));
|
||||
|
||||
return matrix;
|
||||
} else {
|
||||
CarryRenderHelper.applyBlockTransformations(player, matrix, carry.getBlock().getBlock());
|
||||
carry.getActiveScript().ifPresent(script -> CarryRenderHelper.performScriptTransformation(matrix, script));
|
||||
|
||||
PoseStack.Pose p = matrix.last();
|
||||
PoseStack copy = new PoseStack();
|
||||
copy.mulPose(p.pose());
|
||||
matrix.popPose();
|
||||
|
||||
return copy;
|
||||
matrix.translate(0, -1.5, -1.848);
|
||||
if (perspective == 2)
|
||||
matrix.translate(0, 0, 2.38);
|
||||
}
|
||||
|
||||
if (pose == Pose.FALL_FLYING)
|
||||
{
|
||||
float f1 = player.getFallFlyingTicks() + partialticks;
|
||||
float f2 = Mth.clamp(f1 * f1 / 100.0F, 0.0F, 1.0F);
|
||||
if (!player.isAutoSpinAttack())
|
||||
{
|
||||
if (perspective == 2)
|
||||
matrix.translate(0, 0, 1.35);
|
||||
|
||||
if (perspective == 2)
|
||||
matrix.mulPose(Axis.XP.rotationDegrees(f2 * (-90.0F - player.xRotO)));
|
||||
else
|
||||
matrix.mulPose(Axis.XN.rotationDegrees(f2 * (-90.0F - player.xRotO)));
|
||||
}
|
||||
|
||||
Vec3 viewVector = player.getViewVector(partialticks);
|
||||
Vec3 deltaMovement = player.getDeltaMovement();
|
||||
double d0 = deltaMovement.horizontalDistanceSqr();
|
||||
double d1 = deltaMovement.horizontalDistanceSqr();
|
||||
if (d0 > 0.0D && d1 > 0.0D)
|
||||
{
|
||||
double d2 = (deltaMovement.x * viewVector.x + deltaMovement.z * viewVector.z) / (Math.sqrt(d0) * Math.sqrt(d1));
|
||||
double d3 = deltaMovement.x * viewVector.z - deltaMovement.z * viewVector.x;
|
||||
|
||||
matrix.mulPose(Axis.YP.rotation((float) (Math.signum(d3) * Math.acos(d2))));
|
||||
}
|
||||
|
||||
if (perspective != 2)
|
||||
matrix.translate(0, 0, -1.35);
|
||||
matrix.translate(0, -0.2, 0);
|
||||
}
|
||||
|
||||
matrix.translate(0, 1.6, 0.65);
|
||||
}
|
||||
|
||||
public static void applyBlockTransformations(Player player, PoseStack matrix, Block block)
|
||||
public static void applyBlockTransformations(Player player, float partialticks, PoseStack matrix, Block block)
|
||||
{
|
||||
matrix.mulPose(Axis.ZN.rotationDegrees(180));
|
||||
applyGeneralTransformations(player, matrix);
|
||||
int perspective = CarryRenderHelper.getPerspective();
|
||||
|
||||
applyGeneralTransformations(player, partialticks, matrix);
|
||||
|
||||
if (Constants.CLIENT_CONFIG.facePlayer != CarryRenderHelper.isChest(block))
|
||||
{
|
||||
|
|
@ -136,67 +167,59 @@ public class CarryRenderHelper
|
|||
// matrix.translate(0, 0, -0.4);
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
}
|
||||
// if(perspective == 1)
|
||||
// {
|
||||
// matrix.pushPose();
|
||||
// //matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
// matrix.popPose();
|
||||
// }
|
||||
|
||||
//else if ((ModList.get().isLoaded("realrender") || ModList.get().isLoaded("rfpr")) && perspective == 0)
|
||||
// matrix.translate(0, 0, 0.4);
|
||||
//matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
|
||||
|
||||
|
||||
float height = getRenderHeight(player);
|
||||
float offset = (height - 1f) / 1.2f;
|
||||
matrix.translate(0, -offset, 0);
|
||||
}
|
||||
|
||||
public static void setupEntityTransformations(Player player, PoseStack matrix, CarryOnData carry, boolean firstPerson) {
|
||||
|
||||
Entity entity = carry.getEntity(player.level());
|
||||
|
||||
float height = entity.getBbHeight();
|
||||
float width = entity.getBbWidth();
|
||||
|
||||
if(firstPerson) {
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
|
||||
matrix.scale(0.8f, 0.8f, 0.8f);
|
||||
matrix.translate(0.0, -height - .2, width * 1.3 + 0.1);
|
||||
|
||||
carry.getActiveScript().ifPresent(script -> CarryRenderHelper.performScriptTransformation(matrix, script));
|
||||
|
||||
if(Constants.CLIENT_CONFIG.rotateEntitiesSideways)
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(90));
|
||||
}
|
||||
else {
|
||||
applyEntityTransformations(player, matrix, entity);
|
||||
|
||||
carry.getActiveScript().ifPresent(script -> CarryRenderHelper.performScriptTransformation(matrix, script));
|
||||
}
|
||||
}
|
||||
|
||||
public static void applyEntityTransformations(Player player, PoseStack matrix, Entity entity)
|
||||
public static void applyEntityTransformations(Player player, float partialticks, PoseStack matrix, Entity entity)
|
||||
{
|
||||
int perspective = CarryRenderHelper.getPerspective();
|
||||
Pose pose = player.getPose();
|
||||
|
||||
applyGeneralTransformations(player, matrix);
|
||||
applyGeneralTransformations(player, partialticks, matrix);
|
||||
|
||||
matrix.mulPose(Axis.XP.rotationDegrees(180));
|
||||
|
||||
matrix.translate(0, -3.1, -0.65);
|
||||
if (perspective == 2)
|
||||
matrix.translate(0, -1.6, 0.65);
|
||||
else
|
||||
matrix.translate(0, -1.6, -0.65);
|
||||
matrix.scale(1.666f, 1.666f, 1.666f);
|
||||
|
||||
float height = entity.getBbHeight();
|
||||
float width = entity.getBbWidth();
|
||||
float multiplier = Math.min(9.9f, height * width) ;
|
||||
float multiplier = height * width;
|
||||
entity.yo = 0.0f;
|
||||
entity.yRotO = 0.0f;
|
||||
entity.setYHeadRot(0.0f);
|
||||
entity.xo = 0.0f;
|
||||
entity.xRotO = 0.0f;
|
||||
|
||||
if (perspective == 2)
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(180));
|
||||
|
||||
matrix.scale((10 - multiplier) * 0.08f, (10 - multiplier) * 0.08f, (10 - multiplier) * 0.08f);
|
||||
matrix.translate(0.0, height / 2 + -(height / 4) + 1, width - 0.1 < 0.7 ? width - 0.1 + (0.7 - (width - 0.1)) : width - 0.1);
|
||||
|
||||
if(doSneakCheck(player))
|
||||
matrix.translate(0, -0.4, 0);
|
||||
|
||||
if (pose == Pose.SWIMMING || pose == Pose.FALL_FLYING)
|
||||
{
|
||||
matrix.mulPose(Axis.XN.rotationDegrees(180));
|
||||
matrix.translate(0, 0.2 * height - 2, -0.5);
|
||||
matrix.mulPose(Axis.XN.rotationDegrees(90));
|
||||
matrix.translate(0, -0.2 * height, 0);
|
||||
|
||||
if (pose == Pose.FALL_FLYING)
|
||||
matrix.translate(0, 0, 0.2);
|
||||
}
|
||||
|
||||
if(Constants.CLIENT_CONFIG.rotateEntitiesSideways)
|
||||
|
|
@ -440,7 +463,7 @@ public class CarryRenderHelper
|
|||
|
||||
public static boolean isChest(Block block)
|
||||
{
|
||||
return block == Blocks.CHEST || block == Blocks.ENDER_CHEST || block == Blocks.TRAPPED_CHEST || block instanceof ChestBlock;
|
||||
return block == Blocks.CHEST || block == Blocks.ENDER_CHEST || block == Blocks.TRAPPED_CHEST;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,22 +0,0 @@
|
|||
package tschipp.carryon.client.render;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.model.player.PlayerModel;
|
||||
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||
import net.minecraft.client.renderer.entity.RenderLayerParent;
|
||||
import net.minecraft.client.renderer.entity.layers.RenderLayer;
|
||||
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
|
||||
|
||||
public class CarryingItemRenderLayer<M extends PlayerModel> extends RenderLayer<AvatarRenderState, M> {
|
||||
public CarryingItemRenderLayer(RenderLayerParent<AvatarRenderState, M> renderer) {
|
||||
super(renderer);
|
||||
}
|
||||
@Override
|
||||
public void submit(PoseStack poseStack, SubmitNodeCollector nodeCollector, int packedLight,
|
||||
AvatarRenderState renderState, float yRot, float xRot) {
|
||||
if (renderState instanceof ICarryOnRenderState carryOnRenderState){
|
||||
CarriedObjectRender.draw(carryOnRenderState.getPlayer(), poseStack, packedLight, Minecraft.getInstance().getDeltaTracker().getGameTimeDeltaPartialTick(true), nodeCollector,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package tschipp.carryon.client.render;
|
||||
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import tschipp.carryon.common.carry.CarryOnData;
|
||||
|
||||
public interface ICarryOnRenderState {
|
||||
|
|
@ -13,8 +12,4 @@ public interface ICarryOnRenderState {
|
|||
|
||||
void setRenderWidth(float val);
|
||||
|
||||
Player getPlayer();
|
||||
|
||||
void setPlayer(Player player);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ import net.minecraft.world.entity.AreaEffectCloud;
|
|||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
|
@ -51,7 +50,6 @@ import tschipp.carryon.common.scripting.CarryOnScript;
|
|||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public class CarryOnData {
|
||||
|
||||
|
|
@ -105,11 +103,6 @@ public class CarryOnData {
|
|||
|
||||
}
|
||||
|
||||
public CarryType getType()
|
||||
{
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public CompoundTag getNbt()
|
||||
{
|
||||
nbt.putString("type", type.toString());
|
||||
|
|
@ -208,20 +201,8 @@ public class CarryOnData {
|
|||
this.activeScript = script;
|
||||
}
|
||||
|
||||
public void setCarryingPlayer(Player player)
|
||||
{
|
||||
public void setCarryingPlayer() {
|
||||
this.type = CarryType.PLAYER;
|
||||
nbt.putString("player", player.getStringUUID().toString());
|
||||
}
|
||||
|
||||
public Player getCarryingPlayer(Level level)
|
||||
{
|
||||
if(this.type != CarryType.PLAYER)
|
||||
throw new IllegalStateException("Called getCarryingPlayer on data that contained " + this.type);
|
||||
if(!nbt.contains("player"))
|
||||
return null;
|
||||
UUID uuid = UUID.fromString(nbt.getString("player").get());
|
||||
return level.getServer().getPlayerList().getPlayer(uuid);
|
||||
}
|
||||
|
||||
public boolean isCarrying()
|
||||
|
|
|
|||
|
|
@ -29,8 +29,11 @@ import net.minecraft.util.ProblemReporter;
|
|||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.*;
|
||||
import net.minecraft.world.entity.AgeableMob;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.Entity.RemovalReason;
|
||||
import net.minecraft.world.entity.MobCategory;
|
||||
import net.minecraft.world.entity.TamableAnimal;
|
||||
import net.minecraft.world.entity.animal.Animal;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.GameType;
|
||||
|
|
@ -38,6 +41,7 @@ import net.minecraft.world.level.Level;
|
|||
import net.minecraft.world.level.block.DoorBlock;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
|
||||
import net.minecraft.world.level.block.state.properties.Property;
|
||||
import net.minecraft.world.level.storage.TagValueOutput;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
|
@ -102,9 +106,6 @@ public class PickupHandler {
|
|||
nbt = output.buildResult();
|
||||
}
|
||||
|
||||
Optional<CarryOnScript> result = ScriptManager.inspectBlock(state, level, pos, nbt);
|
||||
boolean overrideChecks = result.map(CarryOnScript::overrideChecks).orElse(false);
|
||||
|
||||
if(!ListHandler.isPermitted(state.getBlock()))
|
||||
return false;
|
||||
|
||||
|
|
@ -112,10 +113,10 @@ public class PickupHandler {
|
|||
if(hasPropertyType(state, DoorBlock.HALF))
|
||||
return false;
|
||||
|
||||
if(!overrideChecks && (state.getDestroySpeed(level, pos) == -1 && !player.isCreative() && !Constants.COMMON_CONFIG.settings.pickupUnbreakableBlocks))
|
||||
if(state.getDestroySpeed(level, pos) == -1 && !player.isCreative() && !Constants.COMMON_CONFIG.settings.pickupUnbreakableBlocks)
|
||||
return false;
|
||||
|
||||
if(!overrideChecks && (blockEntity == null && !Constants.COMMON_CONFIG.settings.pickupAllBlocks))
|
||||
if(blockEntity == null && !Constants.COMMON_CONFIG.settings.pickupAllBlocks)
|
||||
return false;
|
||||
|
||||
//Check if TE is locked
|
||||
|
|
@ -136,6 +137,7 @@ public class PickupHandler {
|
|||
if(!doPickup)
|
||||
return false;
|
||||
|
||||
Optional<CarryOnScript> result = ScriptManager.inspectBlock(state, level, pos, nbt);
|
||||
if(result.isPresent())
|
||||
{
|
||||
CarryOnScript script = result.get();
|
||||
|
|
@ -146,7 +148,7 @@ public class PickupHandler {
|
|||
|
||||
String cmd = script.scriptEffects().commandInit();
|
||||
if(!cmd.isEmpty())
|
||||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
player.getServer().getCommands().performPrefixedCommand(player.getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().getName() + " run " + cmd);
|
||||
}
|
||||
|
||||
carry.setBlock(state, blockEntity, player, pos);
|
||||
|
|
@ -177,29 +179,23 @@ public class PickupHandler {
|
|||
|
||||
if (entity instanceof TamableAnimal tame)
|
||||
{
|
||||
EntityReference<LivingEntity> ref = tame.getOwnerReference();
|
||||
if (ref != null) {
|
||||
UUID owner = ref.getUUID();
|
||||
UUID playerID = player.getGameProfile().id();
|
||||
if (!owner.equals(playerID))
|
||||
return false;
|
||||
}
|
||||
UUID owner = tame.getOwnerReference().getUUID();
|
||||
UUID playerID = player.getGameProfile().getId();
|
||||
if (owner != null && !owner.equals(playerID))
|
||||
return false;
|
||||
}
|
||||
|
||||
Optional<CarryOnScript> result = ScriptManager.inspectEntity(entity);
|
||||
boolean overrideChecks = result.map(CarryOnScript::overrideChecks).orElse(false);
|
||||
|
||||
if(!ListHandler.isPermitted(entity))
|
||||
{
|
||||
//We can pick up baby animals even if the grown up animal is blacklisted.
|
||||
if(!overrideChecks && (!(entity instanceof AgeableMob ageableMob && Constants.COMMON_CONFIG.settings.allowBabies && (ageableMob.getAge() < 0 || ageableMob.isBaby()))))
|
||||
if(!(entity instanceof AgeableMob ageableMob && Constants.COMMON_CONFIG.settings.allowBabies && (ageableMob.getAge() < 0 || ageableMob.isBaby())))
|
||||
return false;
|
||||
}
|
||||
|
||||
//Non-Creative only guards
|
||||
if(!player.isCreative())
|
||||
{
|
||||
if(!overrideChecks && (!Constants.COMMON_CONFIG.settings.pickupHostileMobs && entity.getType().getCategory() == MobCategory.MONSTER))
|
||||
if(!Constants.COMMON_CONFIG.settings.pickupHostileMobs && entity.getType().getCategory() == MobCategory.MONSTER)
|
||||
return false;
|
||||
|
||||
if(Constants.COMMON_CONFIG.settings.maxEntityHeight < entity.getBbHeight() || Constants.COMMON_CONFIG.settings.maxEntityWidth < entity.getBbWidth())
|
||||
|
|
@ -219,6 +215,7 @@ public class PickupHandler {
|
|||
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
|
||||
Optional<CarryOnScript> result = ScriptManager.inspectEntity(entity);
|
||||
if(result.isPresent())
|
||||
{
|
||||
CarryOnScript script = result.get();
|
||||
|
|
@ -241,12 +238,12 @@ public class PickupHandler {
|
|||
if (result.isPresent()) {
|
||||
String cmd = result.get().scriptEffects().commandInit();
|
||||
if (!cmd.isEmpty())
|
||||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
player.getServer().getCommands().performPrefixedCommand(player.getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().getName() + " run " + cmd);
|
||||
}
|
||||
|
||||
otherPlayer.startRiding(player, true, false);
|
||||
otherPlayer.startRiding(player, true);
|
||||
Services.PLATFORM.sendPacketToAllPlayers(Constants.PACKET_ID_START_RIDING_OTHER, new ClientboundStartRidingOtherPlayerPacket(player.getId(), otherPlayer.getId(), true), player.level());
|
||||
carry.setCarryingPlayer(otherPlayer);
|
||||
carry.setCarryingPlayer();
|
||||
player.swing(InteractionHand.MAIN_HAND, true);
|
||||
player.level().playSound(null, player.getOnPos(), SoundEvents.ARMOR_EQUIP_GENERIC.value(), SoundSource.AMBIENT, 1.0f, 0.5f);
|
||||
CarryOnDataManager.setCarryData(player, carry);
|
||||
|
|
@ -266,7 +263,7 @@ public class PickupHandler {
|
|||
{
|
||||
String cmd = result.get().scriptEffects().commandInit();
|
||||
if(!cmd.isEmpty())
|
||||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
player.getServer().getCommands().performPrefixedCommand(player.getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().getName() + " run " + cmd);
|
||||
}
|
||||
|
||||
carry.setEntity(entity);
|
||||
|
|
|
|||
|
|
@ -29,16 +29,16 @@ import net.minecraft.world.InteractionHand;
|
|||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.Mob;
|
||||
import net.minecraft.world.entity.animal.equine.Horse;
|
||||
import net.minecraft.world.entity.animal.horse.Horse;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.level.GameRules;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
import net.minecraft.world.level.block.state.properties.Property;
|
||||
import net.minecraft.world.level.gamerules.GameRules;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
|
|
@ -99,7 +99,7 @@ public class PlacementHandler
|
|||
ScriptEffects effects = carry.getActiveScript().get().scriptEffects();
|
||||
String cmd = effects.commandPlace();
|
||||
if (!cmd.isEmpty())
|
||||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
player.getServer().getCommands().performPrefixedCommand(player.getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().getName() + " run " + cmd);
|
||||
}
|
||||
|
||||
level.setBlockAndUpdate(pos, state);
|
||||
|
|
@ -177,7 +177,7 @@ public class PlacementHandler
|
|||
Vec3 placementPos = Vec3.atBottomCenterOf(pos);
|
||||
|
||||
if (carry.isCarrying(CarryType.PLAYER)) {
|
||||
Entity otherPlayer = carry.getCarryingPlayer(level);
|
||||
Entity otherPlayer = player.getFirstPassenger();
|
||||
player.ejectPassengers();
|
||||
Services.PLATFORM.sendPacketToAllPlayers(Constants.PACKET_ID_START_RIDING_OTHER, new ClientboundStartRidingOtherPlayerPacket(player.getId(), otherPlayer.getId(), false), player.level());
|
||||
carry.clear();
|
||||
|
|
@ -199,7 +199,7 @@ public class PlacementHandler
|
|||
ScriptEffects effects = carry.getActiveScript().get().scriptEffects();
|
||||
String cmd = effects.commandPlace();
|
||||
if (!cmd.isEmpty())
|
||||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
player.getServer().getCommands().performPrefixedCommand(player.getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().getName() + " run " + cmd);
|
||||
}
|
||||
|
||||
level.addFreshEntity(entity);
|
||||
|
|
@ -257,20 +257,20 @@ public class PlacementHandler
|
|||
level.addFreshEntity(entityHeld);
|
||||
entityHeld.teleportTo(tempX, tempY, tempZ);
|
||||
}
|
||||
entityHeld.startRiding(topEntity, false,false);
|
||||
entityHeld.startRiding(topEntity, false);
|
||||
} else {
|
||||
if (carry.isCarrying(CarryType.ENTITY)) {
|
||||
entityHeld.setPos(entityClicked.getX(), entityClicked.getY(), entityClicked.getZ());
|
||||
level.addFreshEntity(entityHeld);
|
||||
}
|
||||
entityHeld.startRiding(topEntity, false,false);
|
||||
entityHeld.startRiding(topEntity, false);
|
||||
}
|
||||
|
||||
if (carry.getActiveScript().isPresent()) {
|
||||
ScriptEffects effects = carry.getActiveScript().get().scriptEffects();
|
||||
String cmd = effects.commandPlace();
|
||||
if (!cmd.isEmpty())
|
||||
player.level().getServer().getCommands().performPrefixedCommand(player.level().getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().name() + " run " + cmd);
|
||||
player.getServer().getCommands().performPrefixedCommand(player.getServer().createCommandSourceStack(), "/execute as " + player.getGameProfile().getName() + " run " + cmd);
|
||||
}
|
||||
|
||||
player.swing(InteractionHand.MAIN_HAND, true);
|
||||
|
|
@ -290,7 +290,7 @@ public class PlacementHandler
|
|||
public static void placeCarriedOnDeath(ServerPlayer oldPlayer, ServerPlayer newPlayer, boolean died)
|
||||
{
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(oldPlayer);
|
||||
if (oldPlayer.level().getGameRules().get(GameRules.KEEP_INVENTORY) || !died) {
|
||||
if (oldPlayer.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) || !died) {
|
||||
if (!carry.isCarrying(CarryType.PLAYER)) {
|
||||
CarryOnDataManager.setCarryData(newPlayer, carry);
|
||||
newPlayer.getInventory().setSelectedSlot(oldPlayer.getInventory().getSelectedSlot());
|
||||
|
|
|
|||
|
|
@ -28,8 +28,6 @@ import net.minecraft.commands.Commands;
|
|||
import net.minecraft.commands.arguments.EntityArgument;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.permissions.Permission;
|
||||
import net.minecraft.server.permissions.PermissionLevel;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import tschipp.carryon.Constants;
|
||||
|
|
@ -56,11 +54,11 @@ public class CommandCarryOn
|
|||
|
||||
.then(Commands.literal("clear").executes(cmd -> handleClear(cmd.getSource(), Collections.singleton(cmd.getSource().getPlayerOrException()))))
|
||||
|
||||
.then(Commands.literal("clear").then(Commands.argument("target", EntityArgument.players()).requires(src -> src.permissions().hasPermission(new Permission.HasCommandLevel(PermissionLevel.GAMEMASTERS))).executes(cmd -> handleClear(cmd.getSource(), EntityArgument.getPlayers(cmd, "target")))))
|
||||
.then(Commands.literal("clear").then(Commands.argument("target", EntityArgument.players()).requires(src -> src.hasPermission(2)).executes(cmd -> handleClear(cmd.getSource(), EntityArgument.getPlayers(cmd, "target")))))
|
||||
|
||||
.then(Commands.literal("place").requires(src -> src.permissions().hasPermission(new Permission.HasCommandLevel(PermissionLevel.GAMEMASTERS))).executes(cmd -> handlePlace(cmd.getSource(), Collections.singleton(cmd.getSource().getPlayerOrException()))))
|
||||
.then(Commands.literal("place").requires(src -> src.hasPermission(2)).executes(cmd -> handlePlace(cmd.getSource(), Collections.singleton(cmd.getSource().getPlayerOrException()))))
|
||||
|
||||
.then(Commands.literal("place").then(Commands.argument("target", EntityArgument.players()).requires(src -> src.permissions().hasPermission(new Permission.HasCommandLevel(PermissionLevel.GAMEMASTERS))).executes(cmd -> handlePlace(cmd.getSource(), EntityArgument.getPlayers(cmd, "target")))))
|
||||
.then(Commands.literal("place").then(Commands.argument("target", EntityArgument.players()).requires(src -> src.hasPermission(2)).executes(cmd -> handlePlace(cmd.getSource(), EntityArgument.getPlayers(cmd, "target")))))
|
||||
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ package tschipp.carryon.common.config;
|
|||
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
|
|
@ -119,8 +119,8 @@ public class ListHandler {
|
|||
ALLOWED_TILES_TAGS.clear();
|
||||
PROPERTY_EXCEPTION_CLASSES.clear();
|
||||
|
||||
Map<Identifier, TagKey<Block>> blocktags = BuiltInRegistries.BLOCK.listTagIds().collect(Collectors.toMap(t -> t.location(), t -> t));
|
||||
Map<Identifier, TagKey<EntityType<?>>> entitytags = BuiltInRegistries.ENTITY_TYPE.listTagIds().collect(Collectors.toMap(t -> t.location(), t -> t));
|
||||
Map<ResourceLocation, TagKey<Block>> blocktags = BuiltInRegistries.BLOCK.listTagIds().collect(Collectors.toMap(t -> t.location(), t -> t));
|
||||
Map<ResourceLocation, TagKey<EntityType<?>>> entitytags = BuiltInRegistries.ENTITY_TYPE.listTagIds().collect(Collectors.toMap(t -> t.location(), t -> t));
|
||||
|
||||
List<String> forbidden = new ArrayList<>(List.of(Constants.COMMON_CONFIG.blacklist.forbiddenTiles));
|
||||
forbidden.add("#carryon:block_blacklist");
|
||||
|
|
@ -152,7 +152,7 @@ public class ListHandler {
|
|||
continue;
|
||||
String name = propString.substring(0, propString.indexOf("["));
|
||||
String props = propString.substring(propString.indexOf("[") + 1, propString.indexOf("]"));
|
||||
Block blk = BuiltInRegistries.BLOCK.get(Identifier.parse(name)).get().value();
|
||||
Block blk = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(name)).get().value();
|
||||
for(String propName : props.split(",")) {
|
||||
for (Property<?> prop : blk.defaultBlockState().getProperties()) {
|
||||
if (prop.getName().equals(propName))
|
||||
|
|
@ -162,16 +162,16 @@ public class ListHandler {
|
|||
}
|
||||
}
|
||||
|
||||
private static <T> void addTag(String tag, Map<Identifier, TagKey<T>> tagMap, List<TagKey<T>> tags) {
|
||||
private static <T> void addTag(String tag, Map<ResourceLocation, TagKey<T>> tagMap, List<TagKey<T>> tags) {
|
||||
String sub = tag.substring(1);
|
||||
TagKey<T> t = tagMap.get(Identifier.parse(sub));
|
||||
TagKey<T> t = tagMap.get(ResourceLocation.parse(sub));
|
||||
if (t != null)
|
||||
tags.add(t);
|
||||
}
|
||||
|
||||
private static <T> void addWithWildcards(List<String> entries, Set<String> toAddTo, Registry<T> registry, Map<Identifier, TagKey<T>> tags, List<TagKey<T>> toAddTags) {
|
||||
private static <T> void addWithWildcards(List<String> entries, Set<String> toAddTo, Registry<T> registry, Map<ResourceLocation, TagKey<T>> tags, List<TagKey<T>> toAddTags) {
|
||||
|
||||
Identifier[] keys = registry.keySet().toArray(new Identifier[0]);
|
||||
ResourceLocation[] keys = registry.keySet().toArray(new ResourceLocation[0]);
|
||||
for (int i = 0; i < entries.size(); i++)
|
||||
{
|
||||
String curr = entries.get(i);
|
||||
|
|
@ -181,7 +181,7 @@ public class ListHandler {
|
|||
{
|
||||
String[] filter = curr.replace("*", ",").split(",");
|
||||
|
||||
for (Identifier key : keys)
|
||||
for (ResourceLocation key : keys)
|
||||
{
|
||||
|
||||
if (containsAll(key.toString(), filter))
|
||||
|
|
|
|||
|
|
@ -39,13 +39,12 @@ public record CarryOnScript(
|
|||
ScriptObject scriptObject,
|
||||
ScriptConditions scriptConditions,
|
||||
ScriptRender scriptRender,
|
||||
ScriptEffects scriptEffects,
|
||||
boolean overrideChecks)
|
||||
ScriptEffects scriptEffects)
|
||||
{
|
||||
|
||||
public boolean isValid()
|
||||
{
|
||||
return (isBlock() ^ isEntity()) && (scriptConditions != ScriptConditions.EMPTY || scriptRender != ScriptRender.EMPTY || scriptEffects != ScriptEffects.EMPTY || overrideChecks);
|
||||
return (isBlock() ^ isEntity()) && (scriptConditions != ScriptConditions.EMPTY || scriptRender != ScriptRender.EMPTY || scriptEffects != ScriptEffects.EMPTY);
|
||||
}
|
||||
|
||||
public boolean isBlock()
|
||||
|
|
@ -64,8 +63,7 @@ public record CarryOnScript(
|
|||
ScriptObject.CODEC.fieldOf("object").forGetter(CarryOnScript::scriptObject),
|
||||
ScriptConditions.CODEC.optionalFieldOf("conditions", ScriptConditions.EMPTY).forGetter(CarryOnScript::scriptConditions),
|
||||
ScriptRender.CODEC.optionalFieldOf("render", ScriptRender.EMPTY).forGetter(CarryOnScript::scriptRender),
|
||||
ScriptEffects.CODEC.optionalFieldOf("effects", ScriptEffects.EMPTY).forGetter(CarryOnScript::scriptEffects),
|
||||
Codec.BOOL.optionalFieldOf("override_checks", false).forGetter(CarryOnScript::overrideChecks)
|
||||
ScriptEffects.CODEC.optionalFieldOf("effects", ScriptEffects.EMPTY).forGetter(CarryOnScript::scriptEffects)
|
||||
).apply(instance, CarryOnScript::new)
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import net.minecraft.advancements.AdvancementHolder;
|
|||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.NbtUtils;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.ServerAdvancementManager;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
|
|
@ -127,8 +127,8 @@ public final class Matchables
|
|||
@Override
|
||||
public boolean matches(ServerPlayer player)
|
||||
{
|
||||
ServerAdvancementManager manager = player.level().getServer().getAdvancements();
|
||||
AdvancementHolder adv = manager.get(Identifier.parse(advancement.isEmpty() ? "" : advancement));
|
||||
ServerAdvancementManager manager = player.getServer().getAdvancements();
|
||||
AdvancementHolder adv = manager.get(ResourceLocation.parse(advancement.isEmpty() ? "" : advancement));
|
||||
|
||||
boolean achievement = adv == null ? true : player.getAdvancements().getOrStartProgress(adv).isDone();
|
||||
return achievement;
|
||||
|
|
@ -167,7 +167,7 @@ public final class Matchables
|
|||
if (cond == null || cond.isEmpty())
|
||||
return true;
|
||||
|
||||
Scoreboard score = player.level().getScoreboard();
|
||||
Scoreboard score = player.getScoreboard();
|
||||
String numb;
|
||||
String scorename;
|
||||
int iE = cond.indexOf("=");
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import com.mojang.serialization.DataResult;
|
|||
import net.minecraft.nbt.NbtOps;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.resources.FileToIdConverter;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.packs.resources.ResourceManager;
|
||||
import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener;
|
||||
|
|
@ -45,7 +45,7 @@ public class ScriptReloadListener extends SimpleJsonResourceReloadListener<Carry
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void apply(Map<Identifier, CarryOnScript> scripts, @NotNull ResourceManager resourceManager, @NotNull ProfilerFiller profilerFiller)
|
||||
protected void apply(Map<ResourceLocation, CarryOnScript> scripts, @NotNull ResourceManager resourceManager, @NotNull ProfilerFiller profilerFiller)
|
||||
{
|
||||
ScriptManager.SCRIPTS.clear();
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ public record ClothConfigCompat(BuiltConfig client, BuiltConfig common, Runnable
|
|||
public static Screen getConfigScreen(BuiltConfig client, BuiltConfig common, Screen parentScreen, Runnable onSave) {
|
||||
ConfigBuilder builder = ConfigBuilder.create()
|
||||
.setParentScreen(parentScreen)
|
||||
.setTitle(Component.translatable("key.category.carryon.key.carry.category"));
|
||||
.setTitle(Component.translatable("key.carry.category"));
|
||||
|
||||
buildConfigType(client, builder, "Client Config");
|
||||
buildConfigType(common, builder, "Common Config");
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
package tschipp.carryon.mixin;
|
||||
|
||||
import net.minecraft.client.entity.ClientAvatarEntity;
|
||||
import net.minecraft.client.model.player.PlayerModel;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider.Context;
|
||||
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.player.AvatarRenderer;
|
||||
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
|
||||
import net.minecraft.world.entity.Avatar;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import tschipp.carryon.client.render.CarryingItemRenderLayer;
|
||||
|
||||
@Mixin(AvatarRenderer.class)
|
||||
public abstract class AvatarRendererMixin<AvatarlikeEntity extends Avatar & ClientAvatarEntity> extends LivingEntityRenderer<AvatarlikeEntity, AvatarRenderState, PlayerModel> {
|
||||
|
||||
public AvatarRendererMixin(Context context, PlayerModel model, float shadowRadius) {
|
||||
super(context, model, shadowRadius);
|
||||
}
|
||||
|
||||
@Inject(method = "<init>(Lnet/minecraft/client/renderer/entity/EntityRendererProvider$Context;Z)V", at = @At("RETURN"))
|
||||
public void init(EntityRendererProvider.Context context, boolean slim, CallbackInfo info) {
|
||||
//Player
|
||||
this.addLayer(new CarryingItemRenderLayer<>(this));
|
||||
}
|
||||
}
|
||||
|
|
@ -48,15 +48,14 @@ public abstract class EntityMixin
|
|||
@Shadow
|
||||
public boolean hasPassenger(Entity pEntity) {throw new IllegalStateException("EntityMixin application failed");}
|
||||
|
||||
@Shadow public abstract void onPassengerTurned(Entity $$0);
|
||||
|
||||
@ModifyExpressionValue(method = "startRiding(Lnet/minecraft/world/entity/Entity;ZZ)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/EntityType;canSerialize()Z"))
|
||||
@ModifyExpressionValue(method = "startRiding(Lnet/minecraft/world/entity/Entity;Z)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/EntityType;canSerialize()Z"))
|
||||
private boolean onStartRidingCheck(boolean original, Entity entity, boolean force) {
|
||||
if (force && entity instanceof Player) return true;
|
||||
return original;
|
||||
}
|
||||
|
||||
@Shadow public abstract void onPassengerTurned(Entity $$0);
|
||||
|
||||
@Inject(method = "positionRider(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V", at = @At("HEAD"), cancellable = true)
|
||||
private void onPositionPassenger(Entity entity, MoveFunction move, CallbackInfo ci)
|
||||
{
|
||||
|
|
@ -93,7 +92,7 @@ public abstract class EntityMixin
|
|||
@Inject(method = "onPassengerTurned(Lnet/minecraft/world/entity/Entity;)V", at = @At("HEAD"))
|
||||
private void onPassengerTurned(Entity toUpdate, CallbackInfo ci)
|
||||
{
|
||||
if((Object)this instanceof Player thisPlayer && toUpdate instanceof Player)
|
||||
if((Object)this instanceof Player thisPlayer && toUpdate instanceof Player otherPlayer)
|
||||
{
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(thisPlayer);
|
||||
if(carry.isCarrying(CarryType.PLAYER)) {
|
||||
|
|
|
|||
|
|
@ -23,14 +23,13 @@ public class EntityRendererMixin {
|
|||
shift = At.Shift.AFTER
|
||||
), method = "createRenderState(Lnet/minecraft/world/entity/Entity;F)Lnet/minecraft/client/renderer/entity/state/EntityRenderState;")
|
||||
private void onCreateRenderState(Entity entity, float $$1, CallbackInfoReturnable<EntityRenderState> cir, @Local(ordinal = 0) EntityRenderState state) {
|
||||
|
||||
if (entity instanceof Player player) {
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
|
||||
ICarryOnRenderState carryOnRenderState = (ICarryOnRenderState) state;
|
||||
carryOnRenderState.setCarryOnData(carry);
|
||||
carryOnRenderState.setRenderWidth(CarryRenderHelper.getRenderWidth(player));
|
||||
|
||||
carryOnRenderState.setPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,24 +28,11 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||
import tschipp.carryon.common.carry.CarryOnDataManager;
|
||||
|
||||
@Mixin(Minecraft.class)
|
||||
public class MinecraftMixin {
|
||||
|
||||
@WrapWithCondition(
|
||||
method = "handleKeybinds()V",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "Lnet/minecraft/world/entity/player/Inventory;setSelectedSlot(I)V",
|
||||
ordinal = 0
|
||||
)
|
||||
)
|
||||
private boolean allowSlotSelection(Inventory inv, int slot) {
|
||||
boolean carrying = CarryOnDataManager.getCarryData(inv.player).isCarrying();
|
||||
|
||||
// Allow if not carrying
|
||||
if (!carrying) return true;
|
||||
|
||||
// Block only if trying to switch away
|
||||
return inv.getSelectedSlot() == slot;
|
||||
}
|
||||
public class MinecraftMixin
|
||||
{
|
||||
@WrapWithCondition(method = "handleKeybinds()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Inventory;setSelectedSlot(I)V", ordinal = 0))
|
||||
private boolean allowSlotSelection(Inventory inv,int slot)
|
||||
{
|
||||
return !CarryOnDataManager.getCarryData(inv.player).isCarrying();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@
|
|||
|
||||
package tschipp.carryon.mixin;
|
||||
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
|
@ -32,7 +31,6 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import tschipp.carryon.common.carry.CarryOnData;
|
||||
import tschipp.carryon.common.carry.CarryOnData.CarryType;
|
||||
import tschipp.carryon.common.carry.CarryOnDataManager;
|
||||
|
||||
import java.util.Optional;
|
||||
|
|
@ -52,17 +50,4 @@ public abstract class PlayerMixin extends LivingEntity {
|
|||
res.ifPresent(data -> CarryOnDataManager.setCarryData((Player)((Object)this), data));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void stopRiding() {
|
||||
Entity entity = this.getVehicle();
|
||||
if (entity instanceof Player && entity.getPassengers().size() < 2){
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData((Player) entity);
|
||||
if (carry.getType() == CarryType.PLAYER){
|
||||
carry.clear();
|
||||
((Player) entity).removeEffect(MobEffects.SLOWNESS);
|
||||
}
|
||||
}
|
||||
super.stopRiding();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
package tschipp.carryon.mixin;
|
||||
|
||||
import net.minecraft.client.renderer.entity.state.HumanoidRenderState;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.client.renderer.entity.state.PlayerRenderState;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import tschipp.carryon.client.render.ICarryOnRenderState;
|
||||
import tschipp.carryon.common.carry.CarryOnData;
|
||||
|
||||
@Mixin(HumanoidRenderState.class)
|
||||
@Mixin(PlayerRenderState.class)
|
||||
public class PlayerRenderStateMixin implements ICarryOnRenderState {
|
||||
|
||||
@Unique
|
||||
|
|
@ -16,10 +15,6 @@ public class PlayerRenderStateMixin implements ICarryOnRenderState {
|
|||
@Unique
|
||||
public float renderWidth = 0f;
|
||||
|
||||
|
||||
@Unique
|
||||
public Player player = null;
|
||||
|
||||
@Unique
|
||||
@Override
|
||||
public CarryOnData getCarryOnData() {
|
||||
|
|
@ -43,14 +38,4 @@ public class PlayerRenderStateMixin implements ICarryOnRenderState {
|
|||
public void setRenderWidth(float val) {
|
||||
renderWidth = val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public record ClientboundStartRidingOtherPlayerPacket(int mount, int rider, bool
|
|||
|
||||
if(mount != null && rider != null)
|
||||
if(ride)
|
||||
rider.startRiding(mount, true,true);
|
||||
rider.startRiding(mount, true);
|
||||
else
|
||||
rider.stopRiding();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ package tschipp.carryon.platform.services;
|
|||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
|
@ -63,11 +63,11 @@ public interface IPlatformHelper {
|
|||
|
||||
<T extends PacketBase, B extends FriendlyByteBuf> void registerClientboundPacket(CustomPacketPayload.Type<T> type, Class<T> clazz, StreamCodec<B, T> codec, BiConsumer<T, Player> handler, Object... args);
|
||||
|
||||
void sendPacketToServer(Identifier id, PacketBase packet);
|
||||
void sendPacketToServer(ResourceLocation id, PacketBase packet);
|
||||
|
||||
void sendPacketToPlayer(Identifier id, PacketBase packet, ServerPlayer player);
|
||||
void sendPacketToPlayer(ResourceLocation id, PacketBase packet, ServerPlayer player);
|
||||
|
||||
default void sendPacketToAllPlayers(Identifier id, PacketBase packet, ServerLevel level) {
|
||||
default void sendPacketToAllPlayers(ResourceLocation id, PacketBase packet, ServerLevel level) {
|
||||
for(ServerPlayer p : level.players())
|
||||
sendPacketToPlayer(id, packet, p);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Benutzerdefinierte Bedingungen für Entitäten",
|
||||
|
||||
"key.carry.desc": "Carry",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "suoᴉʇᴉpuoƆ dnʞɔᴉԀ ʎʇᴉʇuƎ ɯoʇsnƆ",
|
||||
|
||||
"key.carry.desc": "ʎɹɹɐƆ",
|
||||
"key.category.carryon.key.carry.category": "uO ʎɹɹɐƆ"
|
||||
"key.carry.category": "uO ʎɹɹɐƆ"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Custom Entity Pickup Conditions",
|
||||
|
||||
"key.carry.desc": "Carry",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Condiciones Personalizadas de Recogida de Entidades",
|
||||
|
||||
"key.carry.desc": "Cargar",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Condiciones Personalizadas para Recoger Entidades",
|
||||
|
||||
"key.carry.desc": "Recoger",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Customizar condiciones para recoger entidades",
|
||||
|
||||
"key.carry.desc": "Agarrar",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Conditions de ramassage d'entités personalisés",
|
||||
|
||||
"key.carry.desc": "Saisir",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Egyedi entitás felvételi feltételek",
|
||||
|
||||
"key.carry.desc": "Cipelés",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Condizioni di prelievo entità personalizzate",
|
||||
|
||||
"key.carry.desc": "Afferra",
|
||||
"key.category.carryon.key.carry.category": "Carry On Mod"
|
||||
"key.carry.category": "Carry On Mod"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "カスタムエンティティ持ち上げ条件",
|
||||
|
||||
"key.carry.desc": "Carry",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "맞춤형 개체 들기 조건",
|
||||
|
||||
"key.carry.desc": "들고 나르기",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Пользовательские условия поднятия сущности",
|
||||
|
||||
"key.carry.desc": "Поднять",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -13,5 +13,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Özel Varlık Alma Durumları",
|
||||
|
||||
"key.carry.desc": "Taşı",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "Користувацькі умови підбору сутностей",
|
||||
|
||||
"key.carry.desc": "Нести",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "自定义抱起实体条件",
|
||||
|
||||
"key.carry.desc": "抱起",
|
||||
"key.category.carryon.key.carry.category": "搬运"
|
||||
"key.carry.category": "搬运"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,5 +12,5 @@
|
|||
"carryon.category.custompickupconditions.custompickupconditionsentities": "自訂實體拾取條件",
|
||||
|
||||
"key.carry.desc": "攜帶",
|
||||
"key.category.carryon.key.carry.category": "Carry On"
|
||||
"key.carry.category": "Carry On"
|
||||
}
|
||||
|
|
@ -9,7 +9,6 @@
|
|||
"PlayerMixin"
|
||||
],
|
||||
"client": [
|
||||
"AvatarRendererMixin",
|
||||
"EntityRendererMixin",
|
||||
"HumanoidModelMixin",
|
||||
"MinecraftMixin",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
plugins {
|
||||
id 'multiloader-loader'
|
||||
id 'fabric-loom' version "${loom_version}"
|
||||
id 'fabric-loom' version '1.10-SNAPSHOT'
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
|
@ -32,7 +32,7 @@ dependencies {
|
|||
modApi("me.shedaniel.cloth:cloth-config-fabric:${cloth_config_version}") {
|
||||
exclude(group: "net.fabricmc.fabric-api")
|
||||
}
|
||||
modApi "com.terraformersmc:modmenu:17.0.0-beta.1"
|
||||
modApi "com.terraformersmc:modmenu:15.0.0-beta.3"
|
||||
}
|
||||
|
||||
loom {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import net.fabricmc.api.ModInitializer;
|
|||
import net.fabricmc.fabric.api.attachment.v1.AttachmentRegistry;
|
||||
import net.fabricmc.fabric.api.attachment.v1.AttachmentType;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import tschipp.carryon.common.carry.CarryOnData;
|
||||
import tschipp.carryon.config.fabric.ConfigLoaderImpl;
|
||||
|
|
@ -35,7 +35,7 @@ import java.io.IOException;
|
|||
public class CarryOnFabricMod implements ModInitializer {
|
||||
|
||||
public static final AttachmentType<CarryOnData> CARRY_ON_DATA_ATTACHMENT_TYPE = AttachmentRegistry.create(
|
||||
Identifier.fromNamespaceAndPath(Constants.MOD_ID, "carry_on_data"),
|
||||
ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "carry_on_data"),
|
||||
builder -> builder
|
||||
.initializer(() -> new CarryOnData(new CompoundTag()))
|
||||
.persistent(CarryOnData.CODEC)
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ public class ArchitecturyCompat {
|
|||
private static Method PLACE_BLOCK;
|
||||
private static Method IS_FALSE;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void setup( ) {
|
||||
try {
|
||||
Class BlockEvent = Class.forName("dev.architectury.event.events.common.BlockEvent");
|
||||
|
|
|
|||
|
|
@ -150,7 +150,6 @@ public class ConfigLoaderImpl {
|
|||
builder.add(category.category, categoryJson);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void buildProperty(JsonObject builder, PropertyData data) throws IllegalAccessException {
|
||||
AnnotationData annotationData = data.getData();
|
||||
builder.addProperty("//"+data.getId(), annotationData.description());
|
||||
|
|
|
|||
|
|
@ -20,8 +20,11 @@
|
|||
|
||||
package tschipp.carryon.events;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
|
||||
import tschipp.carryon.CarryOnCommonClient;
|
||||
import tschipp.carryon.client.render.CarriedObjectRender;
|
||||
|
||||
public class ClientEvents {
|
||||
|
||||
|
|
@ -31,6 +34,10 @@ public class ClientEvents {
|
|||
CarryOnCommonClient.checkForKeybinds();
|
||||
CarryOnCommonClient.onCarryClientTick();
|
||||
});
|
||||
|
||||
WorldRenderEvents.LAST.register(event -> {
|
||||
CarriedObjectRender.drawThirdPerson(event.tickCounter().getGameTimeDeltaPartialTick(true), new PoseStack().last().pose());
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
package tschipp.carryon.events;
|
||||
|
||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents;
|
||||
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.CommonLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
|
|
@ -133,10 +132,12 @@ public class CommonEvents {
|
|||
CarryOnCommon.onCarryTick(player);
|
||||
});
|
||||
|
||||
|
||||
ServerPlayerEvents.COPY_FROM.register(((oldPlayer, newPlayer, alive) -> {
|
||||
PlacementHandler.placeCarriedOnDeath(oldPlayer, newPlayer, !alive);
|
||||
}));
|
||||
|
||||
|
||||
PlayerBlockBreakEvents.BEFORE.register(((world, player, pos, state, blockEntity) -> {
|
||||
if(!CarryOnCommon.onTryBreakBlock(player))
|
||||
return false;
|
||||
|
|
@ -159,19 +160,7 @@ public class CommonEvents {
|
|||
CarryOnCommon.onRiderDisconnected(handler.getPlayer());
|
||||
});
|
||||
|
||||
ServerLivingEntityEvents.ALLOW_DEATH.register((entity, damageSource, damageAmount) -> {
|
||||
if(entity instanceof ServerPlayer sp) {
|
||||
CarryOnCommon.onRiderDisconnected(sp);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
ServerLivingEntityEvents.ALLOW_DAMAGE.register((entity, source, amount) -> {
|
||||
if(entity instanceof ServerPlayer sp) {
|
||||
CarryOnCommon.onPlayerAttacked(sp);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
//TODO: drop carried when attacked
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ package tschipp.carryon.mixin;
|
|||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.player.AbstractClientPlayer;
|
||||
import net.minecraft.client.renderer.ItemInHandRenderer;
|
||||
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
|
@ -31,14 +31,15 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import tschipp.carryon.client.render.CarriedObjectRender;
|
||||
import tschipp.carryon.client.render.CarryRenderHelper;
|
||||
|
||||
@Mixin(ItemInHandRenderer.class)
|
||||
public class ItemInHandRendererMixin
|
||||
{
|
||||
@Inject(at = @At(value = "HEAD"), method = "renderArmWithItem(Lnet/minecraft/client/player/AbstractClientPlayer;FFLnet/minecraft/world/InteractionHand;FLnet/minecraft/world/item/ItemStack;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;I)V", cancellable = true)
|
||||
private void renderArmWithItem(AbstractClientPlayer player, float partialTick, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equippedProgress, PoseStack poseStack, SubmitNodeCollector nodeCollector, int packedLight, CallbackInfo ci)
|
||||
@Inject(at = @At(value = "HEAD"), method = "renderArmWithItem(Lnet/minecraft/client/player/AbstractClientPlayer;FFLnet/minecraft/world/InteractionHand;FLnet/minecraft/world/item/ItemStack;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", cancellable = true)
|
||||
private void onRenderHand(AbstractClientPlayer player, float partialTicks, float pitch, InteractionHand hand, float pSwingProgress, ItemStack pStack, float pEquippedProgress, PoseStack poseStack, MultiBufferSource buffer, int light, CallbackInfo ci)
|
||||
{
|
||||
if(CarriedObjectRender.draw(player, poseStack, packedLight, partialTick,nodeCollector,true))
|
||||
if(CarryRenderHelper.getPerspective() == 0 && CarriedObjectRender.drawFirstPerson(player, buffer, poseStack, light, partialTicks))
|
||||
ci.cancel();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,10 +34,9 @@ import tschipp.carryon.common.carry.CarryOnDataManager;
|
|||
@Mixin(Screen.class)
|
||||
public class ScreenMixin
|
||||
{
|
||||
@Inject(at = @At(value = "TAIL"), method = "init(II)V")
|
||||
private void onInit(int width, int height, CallbackInfo ci)
|
||||
@Inject(at = @At(value = "TAIL"), method = "init(Lnet/minecraft/client/Minecraft;II)V")
|
||||
private void onInit(Minecraft mc, int i, int j, CallbackInfo ci)
|
||||
{
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
Player player = mc.player;
|
||||
if((Object)this instanceof AbstractContainerScreen && player != null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import net.minecraft.network.FriendlyByteBuf;
|
|||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import tschipp.carryon.CarryOnFabricClientMod;
|
||||
|
|
@ -64,7 +64,6 @@ public class FabricPlatformHelper implements IPlatformHelper {
|
|||
ConfigLoaderImpl.registerConfig(cfg);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends PacketBase, B extends FriendlyByteBuf> void registerServerboundPacket(CustomPacketPayload.Type<T> type, Class<T> clazz, StreamCodec<B, T> codec, BiConsumer<T, Player> handler, Object... args)
|
||||
{
|
||||
|
|
@ -77,7 +76,6 @@ public class FabricPlatformHelper implements IPlatformHelper {
|
|||
});
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends PacketBase, B extends FriendlyByteBuf> void registerClientboundPacket(CustomPacketPayload.Type<T> type, Class<T> clazz, StreamCodec<B, T> codec, BiConsumer<T, Player> handler, Object... args)
|
||||
{
|
||||
|
|
@ -90,13 +88,13 @@ public class FabricPlatformHelper implements IPlatformHelper {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPacketToServer(Identifier id, PacketBase packet)
|
||||
public void sendPacketToServer(ResourceLocation id, PacketBase packet)
|
||||
{
|
||||
CarryOnFabricClientMod.sendPacketToServer(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPacketToPlayer(Identifier id, PacketBase packet, ServerPlayer player)
|
||||
public void sendPacketToPlayer(ResourceLocation id, PacketBase packet, ServerPlayer player)
|
||||
{
|
||||
ServerPlayNetworking.send(player, packet);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,15 +21,15 @@
|
|||
package tschipp.carryon.scripting;
|
||||
|
||||
import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import tschipp.carryon.Constants;
|
||||
import tschipp.carryon.common.scripting.ScriptReloadListener;
|
||||
|
||||
public class IdentifiableScriptReloadListener extends ScriptReloadListener implements IdentifiableResourceReloadListener
|
||||
{
|
||||
@Override
|
||||
public Identifier getFabricId()
|
||||
public ResourceLocation getFabricId()
|
||||
{
|
||||
return Identifier.fromNamespaceAndPath(Constants.MOD_ID, "carryon_scripts");
|
||||
return ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "carryon_scripts");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,8 +36,8 @@
|
|||
"depends": {
|
||||
"fabricloader": ">=${fabric_loader_version}",
|
||||
"fabric-api": "*",
|
||||
"minecraft": "${minecraft_version_range_fabric}",
|
||||
"java": ">=${java_version}"
|
||||
"minecraft": "${minecraft_version}",
|
||||
"java": ">=21"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
plugins {
|
||||
id 'multiloader-loader'
|
||||
id 'net.minecraftforge.gradle' version '[6.0.46,6.2)'
|
||||
id 'net.minecraftforge.gradle' version '[6.0.36,6.2)'
|
||||
id 'org.spongepowered.mixin' version '0.7-SNAPSHOT'
|
||||
id 'org.parchmentmc.librarian.forgegradle' version '1.+'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
package tschipp.carryon;
|
||||
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraftforge.eventbus.api.listener.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||
|
|
@ -52,7 +52,7 @@ public class CarryOnForge {
|
|||
@SubscribeEvent
|
||||
public static void setup(final FMLCommonSetupEvent event)
|
||||
{
|
||||
network = ChannelBuilder.named(Identifier.fromNamespaceAndPath(Constants.MOD_ID, "carryonpackets")).simpleChannel();
|
||||
network = ChannelBuilder.named(ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "carryonpackets")).simpleChannel();
|
||||
|
||||
CarryOnCommon.registerServerPackets();
|
||||
CarryOnCommon.registerClientPackets();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
package tschipp.carryon.compat;
|
||||
|
||||
public class ClothConfigCompatForge {
|
||||
|
||||
// public static Screen createScreen(BuiltConfig client, BuiltConfig common, Screen screen) {
|
||||
//
|
||||
// return ClothConfigCompat.getConfigScreen(client, common, screen, () -> {
|
||||
// ConfigLoaderImpl.saveConfig(client); ConfigLoaderImpl.saveConfig(common);});
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -114,7 +114,6 @@ public class ConfigLoaderImpl {
|
|||
builder.pop();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void buildProperty(ForgeConfigSpec.Builder builder, PropertyData data) throws IllegalAccessException {
|
||||
AnnotationData annotationData = data.getData();
|
||||
builder.comment(annotationData.description());
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ package tschipp.carryon.events;
|
|||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
|
||||
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.client.event.RenderHandEvent;
|
||||
|
|
@ -45,14 +45,24 @@ public class ClientEvents {
|
|||
public static boolean renderHand(RenderHandEvent event)
|
||||
{
|
||||
Player player = Minecraft.getInstance().player;
|
||||
MultiBufferSource buffer = event.getMultiBufferSource();
|
||||
PoseStack matrix = event.getPoseStack();
|
||||
int light = event.getPackedLight();
|
||||
float partialTicks = event.getPartialTick();
|
||||
SubmitNodeCollector nodes =event.getNodeCollector();
|
||||
|
||||
//If true, cancels event
|
||||
return CarriedObjectRender.draw(player, matrix, light, partialTicks,nodes,true) && CarryRenderHelper.getPerspective() == 0;
|
||||
return CarriedObjectRender.drawFirstPerson(player, buffer, matrix, light, partialTicks) && CarryRenderHelper.getPerspective() == 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@SubscribeEvent
|
||||
public static void onRenderLevel(Render event)
|
||||
{
|
||||
if(event.getStage() == Stage.AFTER_PARTICLES)
|
||||
CarriedObjectRender.drawThirdPerson(Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(true), event.getPoseStack());
|
||||
}
|
||||
*/
|
||||
|
||||
@SubscribeEvent
|
||||
public static boolean onGuiInit(ScreenEvent.Init.Pre event)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
package tschipp.carryon.events;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
|
@ -36,7 +36,6 @@ import net.minecraftforge.event.*;
|
|||
import net.minecraftforge.event.TickEvent.ServerTickEvent;
|
||||
import net.minecraftforge.event.entity.EntityJoinLevelEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
||||
import net.minecraftforge.event.entity.living.MobSpawnEvent.FinalizeSpawn;
|
||||
import net.minecraftforge.event.entity.player.AttackEntityEvent;
|
||||
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||
|
|
@ -72,7 +71,7 @@ public class CommonEvents
|
|||
Level level = event.getLevel();
|
||||
BlockPos pos = event.getPos();
|
||||
|
||||
if (level.isClientSide())
|
||||
if (level.isClientSide)
|
||||
return false;
|
||||
|
||||
boolean success = false;
|
||||
|
|
@ -95,7 +94,7 @@ public class CommonEvents
|
|||
} else {
|
||||
PlacementHandler.tryPlaceEntity((ServerPlayer) player, pos, event.getFace(), (pPos, toPlace) -> {
|
||||
if (toPlace instanceof Mob mob) {
|
||||
FinalizeSpawn checkSpawn = new FinalizeSpawn(mob, (ServerLevelAccessor) level, pPos.x, pPos.y, pPos.z, ((ServerLevelAccessor) level).getCurrentDifficultyAt(new BlockPos((int) pPos.x, (int) pPos.y, (int) pPos.z)), EntitySpawnReason.EVENT, null, null, null);
|
||||
FinalizeSpawn checkSpawn = new FinalizeSpawn(mob, (ServerLevelAccessor) level, pPos.x, pPos.y, pPos.z, level.getCurrentDifficultyAt(new BlockPos((int) pPos.x, (int) pPos.y, (int) pPos.z)), EntitySpawnReason.EVENT, null, null, null);
|
||||
return !FinalizeSpawn.BUS.post(checkSpawn);
|
||||
}
|
||||
return true;
|
||||
|
|
@ -120,7 +119,7 @@ public class CommonEvents
|
|||
Level level = event.getLevel();
|
||||
Entity target = event.getTarget();
|
||||
|
||||
if (level.isClientSide())
|
||||
if (level.isClientSide)
|
||||
return false;
|
||||
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
|
|
@ -171,14 +170,14 @@ public class CommonEvents
|
|||
@SubscribeEvent
|
||||
public static void onServerTick(ServerTickEvent.Post event)
|
||||
{
|
||||
for (ServerPlayer player : event.server().getPlayerList().getPlayers())
|
||||
for (ServerPlayer player : event.getServer().getPlayerList().getPlayers())
|
||||
CarryOnCommon.onCarryTick(player);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onClone(Clone event)
|
||||
{
|
||||
if (!event.getOriginal().level().isClientSide()) {
|
||||
if (!event.getOriginal().level().isClientSide) {
|
||||
Player newPlayer = event.getEntity();
|
||||
Player oldPlayer = event.getOriginal();
|
||||
oldPlayer.reviveCaps();
|
||||
|
|
@ -224,8 +223,8 @@ public class CommonEvents
|
|||
|
||||
@SubscribeEvent
|
||||
public static void onAttachCapabilities(AttachCapabilitiesEvent.Entities event) {
|
||||
if (event.getObject() instanceof Player) {
|
||||
event.addCapability(Identifier.fromNamespaceAndPath(Constants.MOD_ID, "carry_on_data"), new CarryOnDataCapabilityProvider());
|
||||
if (event.getObject() instanceof Player player) {
|
||||
event.addCapability(ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "carry_on_data"), new CarryOnDataCapabilityProvider());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -243,11 +242,4 @@ public class CommonEvents
|
|||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onPlayerDie(LivingDeathEvent event) {
|
||||
if(event.getEntity() instanceof ServerPlayer sp) {
|
||||
CarryOnCommon.onRiderDisconnected(sp);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
*/
|
||||
|
||||
package tschipp.carryon.events;
|
||||
|
||||
import net.minecraftforge.eventbus.api.listener.Priority;
|
||||
import net.minecraftforge.eventbus.api.listener.SubscribeEvent;
|
||||
import net.minecraftforge.fml.InterModComms;
|
||||
|
|
|
|||
|
|
@ -35,15 +35,20 @@ import tschipp.carryon.platform.Services;
|
|||
@Mod.EventBusSubscriber(bus = Bus.MOD, modid = Constants.MOD_ID, value=Dist.CLIENT)
|
||||
public class ModClientEvents
|
||||
{
|
||||
static{
|
||||
RegisterKeyMappingsEvent.BUS.addListener((e)->CarryOnKeybinds.registerKeybinds(e::register));
|
||||
@SubscribeEvent
|
||||
public static void registerKeybinds(RegisterKeyMappingsEvent event)
|
||||
{
|
||||
CarryOnKeybinds.registerKeybinds(event::register);
|
||||
}
|
||||
|
||||
|
||||
@SubscribeEvent
|
||||
public static void clientSetup(FMLClientSetupEvent event)
|
||||
{
|
||||
if(Services.PLATFORM.isModLoaded("cloth_config")) {
|
||||
ConfigLoaderImpl.CONFIGS.values().toArray(new BuiltConfig[0]);
|
||||
|
||||
BuiltConfig[] configs = ConfigLoaderImpl.CONFIGS.values().toArray(new BuiltConfig[0]);
|
||||
//ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((mc, prevScreen) -> ClothConfigCompatForge.createScreen(configs[1], configs[0], prevScreen)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* GNU Lesser General Public License v3
|
||||
* Copyright (C) 2024 Tschipp
|
||||
* mrtschipp@gmail.com
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package tschipp.carryon.mixin;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.particle.ParticleEngine;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.culling.Frustum;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import tschipp.carryon.client.render.CarriedObjectRender;
|
||||
|
||||
@Mixin(ParticleEngine.class)
|
||||
public class ParticleEngineMixin
|
||||
{
|
||||
//I am injecting into a lambda, lord help me
|
||||
|
||||
@Inject(method = "render(Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/culling/Frustum;)V",
|
||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;endBatch()V",
|
||||
shift = At.Shift.AFTER))
|
||||
private void onRenderLevel(Camera p_107340_, float partialTick, MultiBufferSource.BufferSource p_377798_, Frustum frustum, CallbackInfo ci)
|
||||
{
|
||||
CarriedObjectRender.drawThirdPerson(partialTick, new PoseStack().last().pose());
|
||||
}
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@ package tschipp.carryon.platform;
|
|||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
|
@ -70,7 +70,6 @@ public class ForgePlatformHelper implements IPlatformHelper {
|
|||
ConfigLoaderImpl.registerConfig(cfg);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends PacketBase, B extends FriendlyByteBuf> void registerServerboundPacket(CustomPacketPayload.Type<T> type, Class<T> clazz, StreamCodec<B, T> codec, BiConsumer<T, Player> handler, Object... args)
|
||||
{
|
||||
|
|
@ -87,7 +86,6 @@ public class ForgePlatformHelper implements IPlatformHelper {
|
|||
CarryOnForge.network.messageBuilder(clazz).codec((StreamCodec<FriendlyByteBuf, T>) codec).consumerMainThread(serverHandler).add();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends PacketBase, B extends FriendlyByteBuf> void registerClientboundPacket(CustomPacketPayload.Type<T> type, Class<T> clazz, StreamCodec<B, T> codec, BiConsumer<T, Player> handler, Object... args)
|
||||
{
|
||||
|
|
@ -106,13 +104,13 @@ public class ForgePlatformHelper implements IPlatformHelper {
|
|||
|
||||
|
||||
@Override
|
||||
public void sendPacketToServer(Identifier id, PacketBase packet)
|
||||
public void sendPacketToServer(ResourceLocation id, PacketBase packet)
|
||||
{
|
||||
CarryOnForge.network.send(packet, PacketDistributor.SERVER.noArg());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPacketToPlayer(Identifier id, PacketBase packet, ServerPlayer player)
|
||||
public void sendPacketToPlayer(ResourceLocation id, PacketBase packet, ServerPlayer player)
|
||||
{
|
||||
CarryOnForge.network.send(packet, PacketDistributor.PLAYER.with(player));
|
||||
}
|
||||
|
|
@ -127,8 +125,8 @@ public class ForgePlatformHelper implements IPlatformHelper {
|
|||
public void setCarryData(Player player, CarryOnData data) {
|
||||
var cap = player.getCapability(CarryOnDataCapabilityProvider.CARRY_ON_DATA_CAPABILITY).orElse(new CarryOnDataCapability());
|
||||
cap.setCarryData(data);
|
||||
if(!player.level().isClientSide()) {
|
||||
sendPacketToAllPlayers(Constants.PACKET_ID_SYNC_CARRY_ON_DATA, new ClientboundSyncCarryDataPacket(player.getId(), data), (ServerLevel) player.level());
|
||||
if(!player.level().isClientSide) {
|
||||
sendPacketToAllPlayers(Constants.PACKET_ID_SYNC_SCRIPTS, new ClientboundSyncCarryDataPacket(player.getId(), data), (ServerLevel) player.level());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
"mixins": [
|
||||
],
|
||||
"client": [
|
||||
"ParticleEngineMixin"
|
||||
],
|
||||
"server": [
|
||||
],
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ neoForge {
|
|||
accessTransformers.from(at.absolutePath)
|
||||
}
|
||||
parchment {
|
||||
minecraftVersion = parchment_game_version
|
||||
minecraftVersion = minecraft_version
|
||||
mappingsVersion = parchment_version
|
||||
}
|
||||
runs {
|
||||
|
|
@ -47,7 +47,7 @@ neoForge {
|
|||
|
||||
|
||||
dependencies {
|
||||
compileOnly "me.shedaniel.cloth:cloth-config-neoforge:${cloth_config_version}"
|
||||
api "me.shedaniel.cloth:cloth-config-neoforge:${cloth_config_version}"
|
||||
}
|
||||
|
||||
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
|
|||
import tschipp.carryon.config.BuiltConfig;
|
||||
import tschipp.carryon.config.neoforge.ConfigLoaderImpl;
|
||||
|
||||
|
||||
public record ClothConfigCompatNeo(BuiltConfig client, BuiltConfig common) implements IConfigScreenFactory {
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -114,7 +114,6 @@ public class ConfigLoaderImpl {
|
|||
builder.pop();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void buildProperty(ModConfigSpec.Builder builder, PropertyData data) throws IllegalAccessException {
|
||||
AnnotationData annotationData = data.getData();
|
||||
builder.comment(annotationData.description());
|
||||
|
|
|
|||
|
|
@ -23,13 +23,14 @@ package tschipp.carryon.events;
|
|||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
|
||||
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
||||
import net.neoforged.neoforge.client.event.RenderHandEvent;
|
||||
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
|
||||
import net.neoforged.neoforge.client.event.ScreenEvent;
|
||||
import tschipp.carryon.CarryOnCommonClient;
|
||||
import tschipp.carryon.Constants;
|
||||
|
|
@ -45,15 +46,21 @@ public class ClientEvents {
|
|||
public static void renderHand(RenderHandEvent event)
|
||||
{
|
||||
Player player = Minecraft.getInstance().player;
|
||||
MultiBufferSource buffer = event.getMultiBufferSource();
|
||||
PoseStack matrix = event.getPoseStack();
|
||||
int light = event.getPackedLight();
|
||||
float partialTicks = event.getPartialTick();
|
||||
SubmitNodeCollector nodes =event.getSubmitNodeCollector();
|
||||
|
||||
if(CarriedObjectRender.draw(player, matrix, light, partialTicks,nodes,true) && CarryRenderHelper.getPerspective() == 0)
|
||||
if(CarriedObjectRender.drawFirstPerson(player, buffer, matrix, light, partialTicks) && CarryRenderHelper.getPerspective() == 0)
|
||||
event.setCanceled(true);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRenderLevel(RenderLevelStageEvent.AfterParticles event)
|
||||
{
|
||||
CarriedObjectRender.drawThirdPerson(event.getPartialTick().getGameTimeDeltaPartialTick(true), event.getPoseStack().last().pose());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onGuiInit(ScreenEvent.Init.Pre event)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
package tschipp.carryon.events;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.util.TriState;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
|
|
@ -40,7 +40,6 @@ import net.neoforged.neoforge.event.AddServerReloadListenersEvent;
|
|||
import net.neoforged.neoforge.event.OnDatapackSyncEvent;
|
||||
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
||||
import net.neoforged.neoforge.event.TagsUpdatedEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingDeathEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.MobSpawnEvent;
|
||||
import net.neoforged.neoforge.event.entity.player.AttackEntityEvent;
|
||||
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
|
||||
|
|
@ -70,7 +69,7 @@ public class CommonEvents
|
|||
Level level = event.getLevel();
|
||||
BlockPos pos = event.getPos();
|
||||
|
||||
if (level.isClientSide())
|
||||
if (level.isClientSide)
|
||||
return;
|
||||
|
||||
boolean success = false;
|
||||
|
|
@ -124,7 +123,7 @@ public class CommonEvents
|
|||
Level level = event.getLevel();
|
||||
Entity target = event.getTarget();
|
||||
|
||||
if (level.isClientSide())
|
||||
if (level.isClientSide)
|
||||
return;
|
||||
|
||||
CarryOnData carry = CarryOnDataManager.getCarryData(player);
|
||||
|
|
@ -152,7 +151,7 @@ public class CommonEvents
|
|||
@SubscribeEvent
|
||||
public static void onDatapackRegister(AddServerReloadListenersEvent event)
|
||||
{
|
||||
event.addListener(Identifier.fromNamespaceAndPath(Constants.MOD_ID, "scripts"), new ScriptReloadListener());
|
||||
event.addListener(ResourceLocation.fromNamespaceAndPath(Constants.MOD_ID, "scripts"), new ScriptReloadListener());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
|
|
@ -182,7 +181,7 @@ public class CommonEvents
|
|||
@SubscribeEvent
|
||||
public static void onClone(PlayerEvent.Clone event)
|
||||
{
|
||||
if (!event.getOriginal().level().isClientSide())
|
||||
if (!event.getOriginal().level().isClientSide)
|
||||
PlacementHandler.placeCarriedOnDeath((ServerPlayer) event.getOriginal(), (ServerPlayer) event.getEntity(), event.isWasDeath());
|
||||
}
|
||||
|
||||
|
|
@ -221,11 +220,4 @@ public class CommonEvents
|
|||
CarryOnCommon.onRiderDisconnected(player);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onPlayerDie(LivingDeathEvent event) {
|
||||
if(event.getEntity() instanceof ServerPlayer sp) {
|
||||
CarryOnCommon.onRiderDisconnected(sp);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import net.minecraft.network.FriendlyByteBuf;
|
|||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.neoforged.fml.ModList;
|
||||
|
|
@ -60,7 +60,7 @@ public class NeoForgePlatformHelper implements IPlatformHelper {
|
|||
@Override
|
||||
public boolean isDevelopmentEnvironment() {
|
||||
|
||||
return !FMLLoader.getCurrent().isProduction();
|
||||
return !FMLLoader.isProduction();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -68,7 +68,6 @@ public class NeoForgePlatformHelper implements IPlatformHelper {
|
|||
ConfigLoaderImpl.registerConfig(cfg);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends PacketBase, B extends FriendlyByteBuf> void registerServerboundPacket(CustomPacketPayload.Type<T> type, Class<T> clazz, StreamCodec<B, T> codec, BiConsumer<T, Player> handler, Object... args) {
|
||||
PayloadRegistrar registrar = (PayloadRegistrar) args[0];
|
||||
|
|
@ -82,7 +81,6 @@ public class NeoForgePlatformHelper implements IPlatformHelper {
|
|||
registrar.playToServer(type, (StreamCodec<RegistryFriendlyByteBuf, T>)codec, serverHandler);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends PacketBase, B extends FriendlyByteBuf> void registerClientboundPacket(CustomPacketPayload.Type<T> type, Class<T> clazz, StreamCodec<B, T> codec, BiConsumer<T, Player> handler, Object... args)
|
||||
{
|
||||
|
|
@ -99,12 +97,12 @@ public class NeoForgePlatformHelper implements IPlatformHelper {
|
|||
|
||||
|
||||
@Override
|
||||
public void sendPacketToServer(Identifier id, PacketBase packet) {
|
||||
public void sendPacketToServer(ResourceLocation id, PacketBase packet) {
|
||||
CarryOnNeoForgeClient.sendPacketToServer(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPacketToPlayer(Identifier id, PacketBase packet, ServerPlayer player) {
|
||||
public void sendPacketToPlayer(ResourceLocation id, PacketBase packet, ServerPlayer player) {
|
||||
PacketDistributor.sendToPlayer(player, packet);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
plugins {
|
||||
// see https://fabricmc.net/develop/ for new versions
|
||||
id 'fabric-loom' version "${loom_version}" apply false
|
||||
id 'fabric-loom' version '1.10-SNAPSHOT' apply false
|
||||
// see https://projects.neoforged.net/neoforged/moddevgradle for new versions
|
||||
id 'net.neoforged.moddev' version "${mod_dev_version}" apply false
|
||||
}
|
||||
|
|
@ -100,8 +100,7 @@ processResources {
|
|||
"forge_version": forge_version,
|
||||
"forge_loader_version_range": forge_loader_version_range,
|
||||
'credits' : credits,
|
||||
'java_version' : java_version,
|
||||
'minecraft_version_range_fabric' : minecraft_version_range_fabric,
|
||||
'java_version' : java_version
|
||||
]
|
||||
|
||||
var jsonExpandProps = expandProps.collectEntries {
|
||||
|
|
|
|||
14
docs/issue_template.md
Normal file
14
docs/issue_template.md
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
### Expected Behavior
|
||||
|
||||
|
||||
### Actual Behavior
|
||||
|
||||
|
||||
### Steps to Reproduce
|
||||
|
||||
|
||||
### Version of Minecraft, Carry On, Forge/Fabric
|
||||
|
||||
|
||||
### Screenshots encouraged
|
||||
|
|
@ -1,44 +1,41 @@
|
|||
# Project
|
||||
version=2.9.1
|
||||
version=2.7.1
|
||||
group=tschipp.carryon
|
||||
|
||||
# Common
|
||||
minecraft_version=1.21.11
|
||||
minecraft_version=1.21.8
|
||||
mod_name=Carry On
|
||||
mod_author=Tschipp, PurpliciousCow
|
||||
mod_id=carryon
|
||||
license=GNU LGPLv3
|
||||
credits=
|
||||
description=Carry On is a simple mod that improves game interaction by allowing players to pick up, carry, and place single block Tile Entities using only their empty hands.
|
||||
minecraft_version_range=[1.21.11, 26)
|
||||
minecraft_version_range_fabric=>=1.21.11 <26
|
||||
neo_form_version=1.21.11-20251209.172050
|
||||
minecraft_version_range=[1.21.8, 1.22)
|
||||
neo_form_version=1.21.8-20250717.133445
|
||||
java_version=21
|
||||
parchment_version=2025.12.20
|
||||
parchment_game_version=1.21.11
|
||||
mod_dev_version=2.0.134
|
||||
parchment_version=2025.07.20
|
||||
mod_dev_version=2.0.107
|
||||
# Forge
|
||||
forge_version=61.0.3
|
||||
forge_loader_version_range=[61,)
|
||||
parchment_mappings=2025.12.20-1.21.11
|
||||
forge_version=58.0.10
|
||||
forge_loader_version_range=[57,)
|
||||
parchment_mappings=2025.07.20-1.21.8
|
||||
//forge_ats_enabled=true
|
||||
|
||||
# Fabric
|
||||
fabric_version=0.140.2+1.21.11
|
||||
fabric_loader_version=0.18.4
|
||||
parchment_mappings_fabric=1.21.11:2025.12.20
|
||||
loom_version=1.13-SNAPSHOT
|
||||
fabric_version=0.132.0+1.21.8
|
||||
fabric_loader_version=0.17.2
|
||||
parchment_mappings_fabric=1.21.8:2025.07.20
|
||||
|
||||
# Neoforge
|
||||
neoforge_version=21.11.14-beta
|
||||
neoforge_version=21.8.36
|
||||
neoforge_loader_version_range=[4,)
|
||||
neogradle.subsystems.parchment.minecraftVersion=1.21.11
|
||||
neogradle.subsystems.parchment.mappingsVersion=2025.12.20
|
||||
neogradle.subsystems.parchment.minecraftVersion=1.21.8
|
||||
neogradle.subsystems.parchment.mappingsVersion=2025.07.20
|
||||
|
||||
|
||||
# Gradle
|
||||
org.gradle.jvmargs=-Xmx3G
|
||||
org.gradle.daemon=false
|
||||
|
||||
mixinextras_version=0.5.0
|
||||
cloth_config_version=20.0.148
|
||||
mixinextras_version=0.3.6
|
||||
cloth_config_version=19.0.147
|
||||
|
|
@ -12,9 +12,7 @@ pluginManagement {
|
|||
}
|
||||
filter {
|
||||
includeGroup('net.fabricmc')
|
||||
includeGroup('net.fabricmc.unpick')
|
||||
includeGroup('fabric-loom')
|
||||
includeGroup('net.fabricmc.unpick')
|
||||
}
|
||||
}
|
||||
exclusiveContent {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user